Linq没有显示正确的数字
本文关键字:数字 显示 Linq | 更新日期: 2023-09-27 18:16:12
我是这样使用Linq的:
IQueryable<Rentals> rentals = from r in context.Rentals
select r;
foreach (Rentals r in rentals)
{
str += r.ListingID + "|";
}
但是str
只有50条记录,而如果我做rentals.Count()
,它显示1700条。我试着调试,看到控制流走出foreach
循环后的第50个记录。为什么会这样呢?
List<Rentals> rentals = (from r in context.Rentals
select r).ToList();
尝试先创建一个列表,并检查是否有效。另外,使用StringBuilder()
来构建。让我知道这是否有效。
试试这个:
List<Rentals> rentals = context.Rentals.ToList();
str = Enumerable.Aggregate(rentals, str, (current, r) => current + (r.ListingID + "|"));
它比foreach循环更有效。
您能够将代码更改为以下内容吗?
IEnumerable<Rentals> rentals = from r in context.Rentals
select r;
如果您使用IQueryable<T>
,您的结果将首先准备为sql语句(使用表达式树),然后执行并将处理进程外(服务器端),但是如果您使用。tolist()对结果或使用IEnumerable<T>
返回类型-您的结果将使用LINQ对象(内存中)执行,这就是Count正在做的。
当使用IQueryable<T>
作为返回值时,尝试检查rentals
变量的Expression
属性。我仍然不确定为什么记录的数量不同,但下面的链接解释了IQueryable<T>
和IEnumerable<T>
的差异和使用:
返回IEnumerable