加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 循环到LINQ转换 –

发布时间:2020-12-15 08:13:29 所属栏目:百科 来源:网络整理
导读:好的,我有以下,设置和工作很好.这些代码行应该从DAL实体(Subsonic)转换为ViewModel. IListProductOptionModel OptionsRetData = new ListProductOptionModel(); foreach (var CurProductOption in this.ProductOptions) { OptionsRetData.Add(CurProductOpti
好的,我有以下,设置和工作很好.这些代码行应该从DAL实体(Subsonic)转换为ViewModel.
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
source,Func
2 predicate) at
SubSonic.Extensions.Database.Load[T](IDataReader
rdr,T item,List1 ColumnNames) at
SubSonic.Extensions.Database.ToEnumerable[T](IDataReader
rdr,List
1 ColumnNames) at
SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand1
query,Object[] paramValues) at
lambda_method(Closure ) at
SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression
expression) at
SubSonic.Linq.Structure.Query
1.GetEnumerator()

也许这与亚音速有关?

解决方法

一种可能性是它不起作用,因为您已经改变了查询实现的时间.将代码更改为:
returnData.Options = this.ProductOptions.Select(o => o.ToDataModel()).ToList();

这将迫使查询与之前同时进行评估.

编辑:您的堆栈跟踪显示First()以某种方式被调用,但我们在您显示的代码中没有任何关于它的任何信息……任何想法发生了什么?

编辑:我意识到了差异 – 我以前没有这样做是愚蠢的.您希望强制投影在进程中完成:

returnData.Options = this.ProductOptions
                         .AsEnumerable()
                         .Select(o => o.ToDataModel())
                         .ToList();

对AsEnumerable的额外调用意味着它将被调用的Enumerable.Select重载,使其等同于您的原始代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读