两个简单的查询 - 例外情况发生在:
matchings.Any(u => product.ProductId == u.ProductId)
有什么问题?如果我写true
而不是一切都很好。
var matchings = (from match in db.matchings
where match.StoreId == StoreId
select match).ToList();
var names = (from product in db.Products
where matchings.Any(u => product.ProductId == u.ProductId)
select product).ToList();
答案 0 :(得分:50)
第一种方式:
在第一个查询中删除ToList()
。
或者
//instead of retrieving mathings List, retrieve only the productIds you need (which are a List of Primitive types)
var productIdList = db.matchings
.Where(m => m.StoreId == StoreId)
.Select(x => x.ProductId)
.ToList();
var products = db.Products
.Where(p => productIdList
.Contains(p.ProductId))
.ToList();
或者
//other way
var produts = db.Products
.Where(p => db.matchings
.Any(m => m.StoreId == StoreId &&
m.ProductId == p.ProductId)
)
.ToList();
因为我认为你在linq2entities中,并且你在查询中使用了匹配列表,这是不可能的(你的主题标题往往让我相信这是你的问题)。
答案 1 :(得分:7)
这看起来像是一个使用连接的地方
var query =
from product in db.Products
join matching in db.Matchings
on product.ProductId equals matching.ProductId into matchGroup
where matchGroup.Count() > 0 and matching.StoreId == StoreId
select product;
答案 2 :(得分:3)
使用集合和EF表编写以下查询时,我遇到了同样的问题:
var result = (from listItem in list
join dbRecord in Context.MY_TABLE
on listItem.MyClass.ID equals dbRecord.ID
select new { dbRecord, listItem.SomeEnum }).ToList();
我可以通过更改in
中的源顺序来解决它:
var result = (from dbRecord in Context.MY_TABLE
join listItem in list
on dbRecord.ID equals listItem.MyClass.ID
select new { dbRecord, listItem.SomeEnum }).ToList();
答案 3 :(得分:1)
您可以尝试以下操作。它对我来说是一个可以为null的类型的ProductId操作系统。
IQueryable<matchings> data = db.matchings.Any(u => product.ProductId.Value == u.ProductId);
或者
IQueryable<matchings> data = db.matchings.Any(u => product.ProductId.Value.Equals(u.ProductId));
这在我的情况下起作用,因为目标id是可空类型,因为它指向1:0 - &gt; *关系。