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

时间:2011-07-06 14:27:09

标签: c# asp.net linq linq-to-entities

Edit:

 DataClassesDataContext dc = new DataClassesDataContext();
 string _idCompany = Request["idCompany"];
        var newes = dc.GetNewsCompany(Int64.Parse(_idCompany));            
        string date = "";
        string newsHtml = "<center>"; 
        if(newes.GetEnumerator().MoveNext()){
            foreach (var item in newes)//say Error .......................
            {
               // date = calendar.GetDayOfMonth(item.DateSend) + "/" + calendar.GetMonth(item.DateSend) + "/" + calendar.GetYear(item.DateSend).ToString();
            //    newsHtml += "<li class='news-item'><a style='text-decoration:none' class=\"link\" onclick=\"$(\'#BodyNews\').text(\'" + HttpUtility.HtmlEncode(item.Body).Trim() + "\');$(\'#BodyNews\').dialog({resizable:false});\"   href=\"#\" > " + item.Title.ToString() + "</a>&nbsp;" + date + "   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       </li>";

            }

            newsHtml += "</center>";
            }
            else
            {
               // var propertyCompany = dc.GetPropertyCompanyById(Int64.Parse(_idCompany));
           //     newsHtml += "<li class='news-item'><a style='text-decoration:none' class=\"link\" );$(\'#BodyNews\').dialog({resizable:false});\"   href=\"#\" > " + "!به صفحه شخصی شرکت " + propertyCompany.FirstOrDefault().NameCompany + " خوش آمدید " + "</a>&nbsp;" + date + "   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;       </li>";

            }
        return newsHtml;

说错误:查询结果不能多​​次枚举

check var如何为空或null为枚举;

3 个答案:

答案 0 :(得分:2)

为什么要费心使用if

var newes = dc.GetNewsCompany(Int64.Parse(_idCompany));
//if (newes.GetEnumerator().MoveNext())//check is null or empty
var newesList = newes.ToList();
if (neweList.Count > 0) 
{
    ...
}

您随后可以随时查看newesList.Count属性。

答案 1 :(得分:0)

不确定作为新成员的成员可用,但如果它是一个对象,并且取决于dc.GetNewsCompany返回的内容,您可以检查null

if (news == null) return;

或者如果它返回一个空的集合/数组,只需检查计数/长度:

if (news.Count == 0) return;
if (news.Length == 0) return;

答案 2 :(得分:0)

错误来了,因为你在newes上使用.GetEnumerator()然后在foreach循环中再次使用newes ..这会导致“double enumeration”。

一般情况下,避免使用foreach行走“此类var”,因为DataReader会锁定整个循环!意味着您不能在此循环中使用相同的权限。

更好.ToList(),你可以在list.AsQuearable agian如果你想要Linq就可以了

f.e。

之类的东西
var newes = dc.CompanyTable.Where(ln => ln.id.Equals(_idCompany));;
List<CompanyTable> newesList = newes.ToList();