c# – 循环到LINQ转换 –
好的,我有以下,设置和工作很好.这些代码行应该从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,我可以采取哪些步骤来解决它.
也许这与亚音速有关? 解决方法
一种可能性是它不起作用,因为您已经改变了查询实现的时间.将代码更改为:
returnData.Options = this.ProductOptions.Select(o => o.ToDataModel()).ToList(); 这将迫使查询与之前同时进行评估. 编辑:您的堆栈跟踪显示First()以某种方式被调用,但我们在您显示的代码中没有任何关于它的任何信息……任何想法发生了什么? 编辑:我意识到了差异 – 我以前没有这样做是愚蠢的.您希望强制投影在进程中完成: returnData.Options = this.ProductOptions .AsEnumerable() .Select(o => o.ToDataModel()) .ToList(); 对AsEnumerable的额外调用意味着它将被调用的Enumerable.Select重载,使其等同于您的原始代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |