如何使用LINQ

时间:2017-01-13 16:56:09

标签: c# string linq list delimiter

我找到了一些类似的主题,但没有一个适合我的需求。我有一个字符串列表,如下所示:

List<List<string>> myList = {Foo, Foo, Bar, UniqueValue, Bar}

我想使用Linq创建一个List<List<string>>,它为我提供了3个列表,每个列表都包含我上面列表中的唯一值。像这样:

List<List<string>> Entries =
{
List<List<string>> EntriesNamedFoo = {Foo, Foo, Foo}

List<List<string>> EntriesNamedBar = {Bar, Bar}

List<List<string>> EntriesNamedUniqueValue = {UniqueValue}
}

    //Any given list would look like this:

UniqueValue = {AccountNumber, InvoiceDate, ProfessionalJargon, SomethingElseINeed}

    //So I want to sort my lists by into groups that have the same value at list[0].

在我的代码中,我有一个带帐户的分隔文件。对于每个客户,我想生成一个报告,因此我想通过客户端ID对帐户进行分组。我单独生成了PDF,我想将共享相同客户端ID的文件合并到一个文件中。

我可以在没有LINQ的情况下做到这一点,但我真的很感兴趣如何用LINQ完成。

最后,我希望能够快速确定唯一项目的数量。

在Linq中,您可以计算这样的唯一值的数量:

items.Select(i => i.Value).Distinct().Count();

但我的问题是我的“物品”实际上是一个二维阵列。我有50行10列。我想查看每一行(在第一个元素处)并计算该位置的唯一值的数量。

你们的任何提示都会很棒,谢谢!

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题:

mysql_upgrade_info

它给你这个结果:

- - - - - - - -
Foo
2
- - - - - - - -
Bar
2
- - - - - - - -
UniqueValue
1

答案 1 :(得分:1)

你需要像这样使用GroupBy method

var grouped = original.GroupBy(s => s)
                      .Select(grp => grp.ToList())
                      .ToList();

请注意所有ToList来电,只是为了确保您按照要求随处List<string>,否则您将拥有IEnumerable<string>,这取决于您想要做什么很好。

答案 2 :(得分:0)

 var distinctClientd = myListOfLists.Where(l => l.Any())
                                    .GroupBy(l => l.First())
                                    .Select( g => g.ToList());
是吗?老实说,很难准确理解你在问什么。