使用LINQ比较列表中的项目

时间:2018-09-05 14:40:34

标签: linq

我有以下几项(在用户界面上显示)

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());

2 个答案:

答案 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