LINQ:查询结果不能多​​次枚举

861*_*474 5 c# 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)
Run Code Online (Sandbox Code Playgroud)

我在这段代码中有错误

The query results cannot be enumerated more than once.
Run Code Online (Sandbox Code Playgroud)

请检查并回答我.

bas*_*h.d 11

您不能使用缓存查询并多次迭代它们...
制作List<T>它并再次尝试

var q = query.ToList(); // work on this
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 9

实现您的查询:

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();
Run Code Online (Sandbox Code Playgroud)

然后用Enumerable.Any它来检查它是否包含元素:

if(addresses.Any())
{
    int index = 0; // ...
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*shi 5

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