我和我的"在哪里" linq查询中的子句。 我有以下三个表。
项{ItemId,Name}
Buckets {BucketId,Name}
ItemsBuckets {Id,BucketId,ItemId}
项目可以存在于多个存储桶中,这就是我拥有ItemsBuckets表的原因。 我想找到所有具有名称包含bucketname的特定存储桶的项目。
System.Linq.IQueryable<Item> query = context.Items.Include("ItemsBuckets")
.Include("ItemsBuckets.Buckets");
query = query.Where(n => n.ItemsBuckets.Buckets.Name.Contains(bucketname));
ObservableCollection<Item> items = new ObservableCollection<Item>(query.ToList());
我的where子句不起作用。我收到以下错误:
Error CS1061 'ICollection<ItemsBuckets>' does not contain a definition for
'Buckets' and no extension method 'Buckets' accepting a first argument of
type ICollection<ItemsBuckets> could be found (are you missing a using
directive or an assembly reference?)
我无法找到解决这个问题的方法。有任何想法吗?
答案 0 :(得分:3)
您是否尝试过以下操作?
var query = context.Items
.Where(i => i.ItemsBuckets.Any(ib => ib.Bucket.Name.Contains(bucketname)));
var items = query.ToList();
答案 1 :(得分:0)
您需要通过第一次查询并调用.ToList()
来枚举结果,然后在该结果集上使用Where()
子句。
var q = context.Items.Include("ItemsBuckets").Include("ItemsBuckets.Buckets").ToList();
var results = q.Where(n => n.ItemsBuckets.Buckets.Name.Contains(bucketname));
答案 2 :(得分:0)
假设您在Buckets of ICollection<ItemBucket>
上有一个属性Item
:
var query = from item in context.Items
where item.Buckets.Any(b => b.BucketName == name)
select item;
return query.ToList();