2013-04-23 34 views
4

更多的这是我的代码LINQ:查询结果不能列举不止一次

searchDataContext db = new searchDataContext(); 

    var query = (from p in db.SearchFirst(city, area) 
       select new 
       { 
        ID = p.Id, 
        Address = p.address, 
        Level = p.agahilevel 

       }); 
    int count =query.Count(); 

    // records 
    var q = query.Skip(Convert.ToInt32(start)).Take(Convert.ToInt32(width)); 

    if (q.Count() > 0) 
    { 
     int index = 0; 
     str += "["; 
     foreach (var row in q) 
     { 
      if (index == 0) 

我在此代码

The query results cannot be enumerated more than once. 

请检查并回答我有一个错误。

+0

可能重复:[一个查询的结果不能枚举不止一次](http://stackoverflow.com/questions/5723555),[查询结果不能枚举不止一次](http://stackoverflow.com/questions/13611666) – mellamokb 2013-04-23 12:59:09

+0

walther,我尝试你的答案befor.it不适合我。 – 8611670474 2013-04-23 13:01:00

回答

8

物化查询:

var addresses = (from p in db.SearchFirst(city, area) 
       select new 
       { 
        ID = p.Id, 
        Address = p.address, 
        Level = p.agahilevel 

       }) 
       .Skip(Convert.ToInt32(start)) 
       .Take(Convert.ToInt32(width)) 
       .ToList(); 

然后用Enumerable.Any,以检查其是否包含元素:

if(addresses.Any()) 
{ 
    int index = 0; // ... 
} 
10

不能使用缓存的查询,并在它们之间迭代不止一次...
做它的List<T>,再次尝试

var q = query.ToList(); // work on this 
5

如果添加.ToList()您查询您的问题将得到解决

+0

谢谢你,任何方式 – 8611670474 2013-04-23 14:08:58