IList<ProductOptionModel> OptionsRetData = new List<ProductOptionModel>(); foreach (var CurProductOption in this.ProductOptions) { OptionsRetData.Add(CurProductOption.ToDataModel()); } returnData.Options = OptionsRetData.AsEnumerable();
我想将其转换为LINQ单行语句并提出以下内容.
returnData.Options = this.ProductOptions.Select(o => o.ToDataModel());
并收到以下错误.
Server Error in '/' Application. Sequence contains no matching element
那么为什么第一个语句可以工作但不是LINQ,我可以采取哪些步骤来解决它.
Stack Trace
at
System.Linq.Enumerable.First[TSource](IEnumerable1
2 predicate) at
source,Func
SubSonic.Extensions.Database.Load[T](IDataReader
rdr,T item,List1 ColumnNames) at
1 ColumnNames) at
SubSonic.Extensions.Database.ToEnumerable[T](IDataReader
rdr,List
SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand1
1.GetEnumerator()
query,Object[] paramValues) at
lambda_method(Closure ) at
SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression
expression) at
SubSonic.Linq.Structure.Query
也许这与亚音速有关?
解决方法
returnData.Options = this.ProductOptions.Select(o => o.ToDataModel()).ToList();
这将迫使查询与之前同时进行评估.
编辑:您的堆栈跟踪显示First()以某种方式被调用,但我们在您显示的代码中没有任何关于它的任何信息……任何想法发生了什么?
编辑:我意识到了差异 – 我以前没有这样做是愚蠢的.您希望强制投影在进程中完成:
returnData.Options = this.ProductOptions .AsEnumerable() .Select(o => o.ToDataModel()) .ToList();
原文地址:https://www.jb51.cc/csharp/239004.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。