物化查询结果不支持此方法

时间:2010-08-09 06:14:55

标签: c# linq entity-framework

在这里查看我的代码:

public static ItemType GetItem(int id)
{
    ItemType it = new ItemType();
    using (var context = matrix2.matrix2core.DataAccess.Connection.GetContext())
    {
        var q = (from ci in context.Item
                 where ci.ID == id
                 let TemplateID = ci.TemplateID
                 let Groups = from x in context.CriteriaGroup
                              where x.TemplateID == TemplateID
                              select new
                              {
                                  x
                              }
                 let CriteriaItems = from x in context.CriteriaItem
                                     where Groups.Select(y => y.x.ID).Contains(x.CriteriaGroupID)
                                     select new
                                     {
                                         x
                                     }
                 select new
                 {
                     ci.ID,
                     ci.Name,
                     ci.CategoryID,
                     ci.Description,
                     ci.ItemValue,
                     TemplateID,
                     Groups,
                     CriteriaItems,
                     ItemValues = from x in context.ItemValue
                                  where x.ItemID == id
                                  select new
                                  {
                                      x,
                                      CriteriaID = x.CriteriaItem.Criteria.ID
                                  }
                 }).FirstOrDefault();

        if (q != null)
        {
            it.ID = q.ID;
            it.CategoryID = q.CategoryID;
            it.Name = q.Name;
            it.TemplateID = q.TemplateID;
            it.Description = q.Description;
            it.CriteriaGroups = new List<CriteriaGroupType>();
            it.CriteriaItems = new List<CriteriaItemType>();
            it.ItemValues = new List<ItemValueType>();

            foreach (var x in q.ItemValues)
            {
                ItemValueType ivt = new ItemValueType();
                ivt.CriteriaItemID = x.x.CriteriaItemID;
                ivt.CriteriaID = x.CriteriaID;
                ivt.Data = x.x.Data;
                ivt.ID = x.x.ID;
                ivt.ItemID = x.x.ItemID;
                it.ItemValues.Add(ivt);
            }

            /////////error when I added the orderby clause
            foreach (var x in q.Groups.OrderBy(x => x.x.SortOrder))
            {
                CriteriaGroupType cgt = new CriteriaGroupType();
                cgt.ID = x.x.ID;
                cgt.Name = !string.IsNullOrEmpty(x.x.Name) ? x.x.Name : "Group" + x.x.ID;
                cgt.SortOrder = x.x.SortOrder;
                cgt.TemplateID = x.x.TemplateID;
                it.CriteriaGroups.Add(cgt);
            }

            /////////error when I added the orderby clause 
            foreach (var temp in q.CriteriaItems.OrderBy(x => x.x.SortOrder))
            {
                CriteriaItemType cit = new CriteriaItemType();
                cit.ID = temp.x.ID;
                cit.CriteriaGroupID = temp.x.CriteriaGroupID;
                cit.GroupName = (temp.x.Name != null) ? temp.x.Name : "Group" + temp.x.ID;
                cit.CriteriaID = temp.x.CriteriaID;
                cit.CriteriaName = temp.x.Criteria.Name;
                cit.Name = !string.IsNullOrEmpty(temp.x.Name) ? temp.x.Name : temp.x.Criteria.Name;
                cit.Options = temp.x.Options;
                it.CriteriaItems.Add(cit);
            }
        }
    }
    return it;
}

我没有让SQL处理排序(OrderBy),而是让asp.net进行排序。我从SQL linq查询中取出了它并将其放在foreach循环上。当我这样做时,我得到了错误。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

你应该可以通过简单的

从IQueryable转到IEnumerable

<击>  var q2 = q.ToList();

我的意思当然是:

var groups = q.Groups.ToList();

答案 1 :(得分:0)

看看this link 也许Julie Lerman提出的建议对你的案子有帮助。