我试图根据id列表从数据库中获取对象,但是我收到了错误
LINQ to Entities无法识别方法'Boolean Contains(System.Object)'方法,并且此方法无法转换为商店表达式
这是我的代码
shopingEntities db = new shopingEntities();
var q = (from a in db.CatSetups
join b in db.CatofCats
on a.CatId equals b.ParentCatID
where a.CatId == 1
select new
{
// ID b.ChildCat
});
ArrayList list = new ArrayList(q.ToList());
var ok = (from cc in db.CatSetups
where list.Contains(cc.CatId)
select cc).ToList();
答案 0 :(得分:0)
如果我很清楚您的问题,那么您正在尝试查找给定类别ID的子类别
var childCats=from a in db.CatSetups
join b in db.CatofCats on a.CatId equals b.ParentCatID
where a.CatId == 1
select b.ChildCat;//Assuming ChildCat is an integer
var cats=db.CatSetups.Where(c=>childCats.Contains(c.CatId)).ToList();
如果CatofCats
是多对多关系中的联结表,并且您使用的是导航属性:
public class CatofCats
{
public int ParentCatID{get;set;}
public int ChildCatID{get;set;}
public virtual CatSetups ParentCat{get;set;}
public virtual CatSetups ChildCat{get;set;}
}
然后你的查询将是:
var childCats=db.CatofCats.Where(c=>c.ParentCatID==1).Select(c=>ChildCat);
答案 1 :(得分:0)
ArrayList.Contains
根本没有翻译。但是你不需要这样做。只需使用:
var q = from a in db.CatSetups
join b in db.CatofCats
on a.CatId equals b.ParentCatID
where a.CatId == 1
select b.ChildCat;
var list = q.ToList();
现在,如果您使用Contains
,则会解析为Enumerable.Contains<T>
,其中EF具有内置翻译路径。仅当T
是基本类型时。这就是为什么你不应该选择匿名类型的原因。
答案 2 :(得分:0)
这与您使用ArrayList
的事实有关,您不能这样做:
`
var list = q.ToList()
var ok = (from cc in db.CatSetups
where list.Contains(cc.CatId)
select cc).ToList();
`
我不是EF专家,但我怀疑只包含泛型 集合