Linq没有显示正确的号码

时间:2011-11-28 14:46:23

标签: c# linq entity-framework linq-to-sql

我正在使用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项纪录。为什么会这样?

4 个答案:

答案 0 :(得分:1)

List<Rentals> rentals = (from r in context.Rentals
                              select r).ToList();

首先尝试创建列表并检查其是否有效。另外,使用StringBuilder()构建。让我知道这个是否奏效。

答案 1 :(得分:0)

试试这个:

List<Rentals> rentals = context.Rentals.ToList();

str = Enumerable.Aggregate(rentals, str, (current, r) => current + (r.ListingID + "|"));

foreach循环效率更高。

答案 2 :(得分:0)

您是否可以将代码更改为以下内容?

IEnumerable<Rentals> rentals = from r in context.Rentals
                               select r;

答案 3 :(得分:0)

如果您使用IQueryable<T>,您的结果将首先准备为sql语句(使用表达式树)然后执行并将在进程外(服务器端)处理,但如果您使用.ToList ()结果或使用IEnumerable<T>返回类型 - 您的结果将使用LINQ to Objects(内存)执行,这正是Count正在执行的操作。

使用Expression作为返回值时,尝试检查rentals变量的IQueryable<T>属性。我仍然不确定为什么记录数量不同,但以下链接解释了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/

Returning IEnumerable<T> vs. IQueryable<T>