我有以下几项(在用户界面上显示)
Items | Type | Providers |
Choclate | Mint | Nestle |
Choclate | BlueBerry | Nestle |
Choclate | White | Nestle |
Choclate | Mint | LocalProvider |
Choclate | BlueBerry | LocalProvider |
Choclate | White | LocalProvider |
Starburst | mixed | SomeXProvider |
SourPatch | mixed | SomeYProvider |
Toffee | Carmel | LocalProvider |
Toffee | Salted Carmel | NewProvider |
Toffee | Vanilla | Eclairs |
我正在尝试获取具有多个 Providers 而不包含其他 Providers 的 Items 。如何构造LINQ查询以获得结果。我已经上网了一段时间,但没有发现任何东西。
例如,Choclate有多个提供程序。我想要一个仅包含Chocalte的列表,以便我可以按自己的方式对其进行过滤。
我要从列表中删除“本地提供者”,因为我将雀巢作为提供者。
我的最终结果应该是
Items | Type | Providers |
Choclate | Mint | Nestle |
Choclate | BlueBerry | Nestle |
Choclate | White | Nestle |
Starburst | mixed | SomeXProvider |
SourPatch | mixed | SomeYProvider |
Toffee | Salted Carmel | NewProvider |
Toffee | Vanilla | Eclairs |
一个用户帮了我一些忙,但结果却不如预期。更新的查询
responses.GroupBy(x => x.Items).Where(g => g.Select(y => y.Providers != "LocalProvider").Distinct().Count() > 1).Select(b => b.First());
答案 0 :(得分:1)
var secondList = responses.Where(x => x.Providers != "LocalProvider").GroupBy(x => x.Items).ToList();
将结果投射到另一个变量中。然后,该变量将包含过滤后的结果。
答案 1 :(得分:1)
我已通过三个较小的步骤来做到这一点,以弄清楚正在发生的事情。您可以将其组合成一个大语句,但这可能使其不清楚。
// Gather all the Local products
var localProducts = products.Where(x => x.Providers == "LocalProvider");
// Find Local products that have a non-local counterpart
var localProductsToRemove = localProducts.Where(
x => products.Any(
y => y.Items == x.Items && y.Type == x.Type && y.Providers != x.Providers
)
);
// Take all products except the ones that we want to remove
var result = products.Except(localProductsToRemove);
可运行的.NET小提琴:https://dotnetfiddle.net/RePXLY