首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LINQ比较列表中的项

使用LINQ比较列表中的项
EN

Stack Overflow用户
提问于 2018-09-05 14:40:34
回答 2查看 64关注 0票数 0

我有以下项目(在UI上显示)

代码语言:javascript
复制
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         |

我试图得到的项目有多个提供者,但不是其他的。如何构造LINQ查询以获得结果。我已经在网上找了一段时间了,但什么也没找到。

乔克拉特有多个提供者。我想要一个只有Chocalte的列表,这样我就可以用我想要的方式过滤它。

我想从列表中删除本地提供程序,因为我有Nestle作为提供程序。

我的最终结果应该是

代码语言:javascript
复制
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         |

一个用户帮了我一点点忙,但结果并不像预期的那样。更新查询

代码语言:javascript
复制
responses.GroupBy(x => x.Items).Where(g => g.Select(y => y.Providers != "LocalProvider").Distinct().Count() > 1).Select(b => b.First());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-06 10:07:40

我用了三个较小的步骤来说明正在发生的事情。你可以把它合并成一个大的声明,但这可能会让它变得不那么清晰。

代码语言:javascript
复制
// 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 Fiddle:https://dotnetfiddle.net/RePXLY

票数 1
EN

Stack Overflow用户

发布于 2018-09-05 15:17:14

代码语言:javascript
复制
var secondList = responses.Where(x => x.Providers != "LocalProvider").GroupBy(x => x.Items).ToList();

将结果转换为另一个变量。然后,该变量将包含筛选的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52187844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档