[英]Linq query for NOT IN on joined table
我正在尝试编写一个半复杂的查询:-
该查询应从表中选择一个随机选择的行,这些行在链接表中没有匹配的条目。 即
dishes
----
id
name
food
----
id
name
foodInDishes
----
food_id
dish_id
因此,我要完成的工作是选择用户没有特定食物的前10行。 所以
“给我我可以做的十道不含胡萝卜的菜”
在C#中,我要避免使用List<int>
食物。 到目前为止,我也有:-
List<int> oFoodsToAvoid = new List<int>();
var oDishes= db.dishes.OrderBy(r => Guid.NewGuid()).Take(10);
但是,我在努力避免使用where子句。 我面临的问题是因为它是一个子表(即items.foods.id)。 关于where子句应包含的任何建议?
您可以使用简单的嵌套lambda来实现此目的。 如果oFoodsToAvoid
很大,则可以在查询之前对其进行排序,然后在嵌套的lambda中使用Array.BinarySearch()
:
List<int> oFoodsToAvoid = new List<int>();
var oDishes= db.dishes.Where(d => !d.foods.Any(df => oFoodsToAvoid.Any(arr => arr == df.food_id)))
.OrderBy(r => Guid.NewGuid()).Take(10);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.