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个记录。为什么会这样呢?

Linq没有显示正确的数字

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>的差异和使用:

http://blogs.msdn.com/b/erickt/archive/2006/10/23/iqueryable-t-vs-ienumerable-t.aspx

http://jonkruger.com/blog/2007/10/19/iqueryable-vs-ienumerable-in-linq-to-sql-queries/

返回IEnumerable与IQueryable