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