繁体   English   中英

Linq查询联接表上的NOT IN

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM