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

时间:2017-12-28 19:10:36

标签: c# list linq collections tuples

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

for (int x=0; x<4; x++) {
    c1 = new CountTest();
}

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

List<Tuple<string, string>> Descriptions;

我想使用Linq检索列表,其中元组中的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")); 是某个值,例如Item1。我可以使用这段代码:

"max"

但这会为 s 分配一个我不想要的元组列表。我只想要一个描述字符串列表,也就是说,它应该返回一个var s = Descriptions.Where (x => x.Item1 == "max"); ,其中包含与list<string>字符串Item1相关的所有描述。

3 个答案:

答案 0 :(得分:5)

使用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的扩展方法。

答案 1 :(得分:3)

Where()之后,您可以使用Select()方法仅获取description Item2 Tuple var s = Descriptions.Where(x => x.Item1 == "max") .Select(x=>x.Item2); // projects only Description ,您需要执行此操作:

IEnumerable<string>

这将返回Item1形式的所有元素,其中"max"具有值List<string>,如果您确实希望将其作为ToList(),则可以添加最后{{1}}方法调用。

希望它有所帮助。

答案 2 :(得分:0)

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

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