在连接表上查询NOT IN
本文关键字:NOT IN 查询 连接 | 更新日期: 2023-09-27 18:02:12
我想写一个半复杂的查询:-
查询应该从一个在链接表中没有匹配条目的表中随机选择行。即
dishes
----
id
name
food
----
id
name
foodInDishes
----
food_id
dish_id
所以我想要完成的是选择用户没有特定食物的前10行。所以
"给我10道不含胡萝卜的菜"
在c#中,我有一个要避免的食物的List<int>
。到目前为止,我也得到了:-
List<int> oFoodsToAvoid = new List<int>();
var oDishes= db.dishes.OrderBy(r => Guid.NewGuid()).Take(10);
然而,我正在与食物斗争,以避免where从句。我面临的问题是因为它是一个子表(即items.food .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);