gpt4 book ai didi

c# - 循环到 LINQ 转换 -

转载 作者:太空狗 更新时间:2023-10-29 21:25:22 24 4
gpt4 key购买 nike

好的,我有以下内容,设置和运行良好。这些代码行应该执行从 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 重载,使其等同于您的原始代码。

关于c# - 循环到 LINQ 转换 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2905874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com