通过Linq查询从双值的元组返回一个List

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Linq查询从双值的元组返回一个List相关的知识,希望对你有一定的参考价值。

我有一个具有双值的元组列表:

List<Tuple<string, string>> Descriptions;

我一直在为此添加内容,如下所示:

Descriptions.Add (new Tuple<string, string> ("max", "some description"));
Descriptions.Add (new Tuple<string, string> ("joe", "some description"));
Descriptions.Add (new Tuple<string, string> ("jane", "some description"));
Descriptions.Add (new Tuple<string, string> ("max", "some other description"));

我想使用Linq检索一个列表,其中元组中的Item1是一个特定值,比如"max"。我可以使用这段代码:

var s = Descriptions.Where (x => x.Item1 == "max");

但是这将分配一个我不想要的元组列表。我只想要一个描述字符串的列表,也就是说,它应该返回一个list<string>,其中包含与Item1字符串"max"相关的所有描述。

答案

使用Select

var s = Descriptions.Where (x => x.Item1 == "max").Select(y => y.Item2);

这将返回一个IEnumerable<string>。如果你想要一个列表,你还需要在最后添加ToList

var s = Descriptions.Where (x => x.Item1 == "max").Select(y => y.Item2).ToList();

或者您可以使用查询语法:

var s = from d in Descriptions
        where d.Item1 == "max"
        select d.Item2;

这与第一个选项相同。实际上,编译器会将查询语法转换为linq的扩展方法。

另一答案

Where()之后,你可以使用Select()方法只获得description,在你的情况下将是Item2Tuple,你需要这样做:

var s = Descriptions.Where(x => x.Item1 == "max")
                    .Select(x=>x.Item2); // projects only Description

这将返回IEnumerable<string>形式的所有元素,其中Item1具有值"max",如果你真的想把它作为List<string>,那么你可以在结尾添加ToList()方法调用。

希望能帮助到你。

另一答案

如果您不使用其他解决方案,请尝试使用字典而不是元组列表。根据您的内容的外观,这更符合您的需求(只有您的名字是唯一的)。

Dictionary<string, string> NameDesc = new Dictionary<string, string>();
            NameDesc.Add("max", "desc1");
            NameDesc.Add("tim", "desc2");

            var description = NameDesc["max"];
            var maxExists = NameDesc.ContainsKey("max");

以上是关于通过Linq查询从双值的元组返回一个List的主要内容,如果未能解决你的问题,请参考以下文章

从元组列表中返回具有最小 y 值的元组

Python3基础 list(enumerate()) 将一个列表的每一个元素转换成 带索引值的元组

Python3基础 list enumerate 将列表的每个元素转换成 带索引值的元组

Python3基础 list enumerate 将列表的每个元素转换成 带索引值的元组

元祖-tuple

如何对返回 orm 对象和自定义列的元组的查询进行正确排序、分组?