gpt4 book ai didi

c# - LINQ:使用 "AND"时生成 "OR"表达式而不是 "CONTAINS"

转载 作者:行者123 更新时间:2023-11-30 19:26:07 27 4
gpt4 key购买 nike

我有这个列表:

string[] countries = {
"USA",
"CANADA"
};

当我运行这个查询时:

query = (from user in db where
user.Orders.Any(order => order.Price > 10 &&
countries.Contains(order.DestinationCountry)))

输出是将订单发送到“美国”“加拿大”的用户列表。

但我想要将订单发送到“美国”“加拿大”的用户列表。

我可以使用下面的代码来做到这一点,但我正在寻找一个没有任何 ForEach 的纯 linq 解决方案:

foreach (country in countries) {
query = (from user in query where
user.Orders.Any(order => order.Price > 10 &&
order.DestinationCountry == country));
}

答案:

一个。使用.Aggregate()

生成的查询就像 For Each。

B.where countries.All(c => user.Orders.Any(o => o.Price > 10 && o.DestinationCountry == c))

当国家列表中没有元素时(当我希望所有用户仅基于价格参数时),结果不正确,不考虑其他参数!


更新 1:

我在发布前尝试使用 .All() 而不是 .Contains() 并返回 0 个用户。

更新 2:

我更新了我的问题,使其更接近实际问题。

假设国家不是唯一的参数。

更新 3:

检查了一些答案并将结果添加到我的问题中。

最佳答案

所以您想要一个用户列表,以便列表中的所有国家/地区都出现在订单目的地集中?

从逻辑上讲,这将是:

query = from user in db
where countries.All(c => user.Orders.Any(o => o.DestinationCountry == c))
select ...;

但是,我不相信 EF 会用它做你想做的事。我不清楚正确的 SQL 查询应该从什么开始 - 至少以一种简单的方式。

关于c# - LINQ:使用 "AND"时生成 "OR"表达式而不是 "CONTAINS",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com