C# 如何根据另一项的值获取元组列表中某项的值?

C# 如何根据另一项的值获取元组列表中某项的值?,c#,list,tuples,C#,List,Tuples,我试图通过查看元组列表中同一元组中另一项的值来获取该项的值。我最终需要做的是抓取所有具有特定项2的元组,从该选择中选择最近的日期时间,然后抓取项1 例如,如果我想最终从程序员组中获取最新的名称,我希望逻辑能够获取所有表示程序员的条目,看看哪个条目具有最新的日期和输出斯坦,因为6/25比6/20更近 List<Tuple<string, string, DateTime>> myList; myList.Add(new Tuple<string, st

我试图通过查看元组列表中同一元组中另一项的值来获取该项的值。我最终需要做的是抓取所有具有特定项2的元组,从该选择中选择最近的日期时间,然后抓取项1

例如,如果我想最终从程序员组中获取最新的名称,我希望逻辑能够获取所有表示程序员的条目,看看哪个条目具有最新的日期和输出斯坦,因为6/25比6/20更近

    List<Tuple<string, string, DateTime>> myList;
    myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", 6/20/2013));
    myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", 6/25/2012));
    myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", 6/20/2013));

这是一个使用LINQ的相当简单的操作。第一步是按DateTime Item3对列表进行排序,然后您可以在查询中首先链接,它将返回最新的项。请注意,LINQ操作没有执行到位,这意味着myList中ITME的顺序不会受到此操作的影响。它将创建一个新的IEnumerable,该IEnumerable是按tuple.Item3排序的,然后从中获得第一个项

Tuple<string, string, DateTime> mostRecent = myList.Orderby(x => x.Item3).First();
要添加对组的限制,只需添加where子句

Tuple<string, string, DateTime> mostRecent = myList.Where(y => y.Item2 == "Programmer").Orderby(x => x.Item3).First();

我建议在LINQ to Objects查询操作符上签出文档。我使用的所有东西都是标准的查询运算符,在现代C代码库中,您可能会看到它们无处不在。如果您了解如何使用标准查询运算符,如Select、Where、OrderBy、ThenBy,以及Join和SelectMany,您将更加熟练地操作集合。

这是一个使用LINQ的相当简单的操作。第一步是按DateTime Item3对列表进行排序,然后您可以在查询中首先链接,它将返回最新的项。请注意,LINQ操作没有执行到位,这意味着myList中ITME的顺序不会受到此操作的影响。它将创建一个新的IEnumerable,该IEnumerable是按tuple.Item3排序的,然后从中获得第一个项

Tuple<string, string, DateTime> mostRecent = myList.Orderby(x => x.Item3).First();
List<Tuple<string, string, DateTime>> myList = new List<Tuple<string,string,DateTime>>();

myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", new DateTime(2013,6,20)));
myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", new DateTime(2013, 6, 25)));
myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", new DateTime(2013, 6, 20)));

var result = myList.Where(x => x.Item2.Equals("Programmer")).OrderByDescending(x => x.Item3).Take(1);
要添加对组的限制,只需添加where子句

Tuple<string, string, DateTime> mostRecent = myList.Where(y => y.Item2 == "Programmer").Orderby(x => x.Item3).First();

我建议在LINQ to Objects查询操作符上签出文档。我使用的所有东西都是标准的查询运算符,在现代C代码库中,您可能会看到它们无处不在。如果您了解如何使用标准的查询运算符,如Select、Where、OrderBy、ThenBy,以及Join和SelectMany,您将更加熟练地操作集合。

谢谢!我理解.Where后面的部分,但是你能解释一下为什么.AsEnumerable是必要的吗?在这种情况下,它是不必要的。最近,我一直在使用DataTable对象并使用AsEnumerable,因为在这种情况下,我需要它才能对其执行LINQ操作,正如您在这里看到的:谢谢!我理解.Where后面的部分,但是你能解释一下为什么.AsEnumerable是必要的吗?在这种情况下,它是不必要的。最近我一直在处理DataTable对象并使用AsEnumerable,因为在这种情况下,我需要它以便能够对其执行LINQ操作,正如您在这里看到的:我明白您的意思,但也有一些情况下,我不关心的另一个群体的约会时间可能比我所关注的群体的约会时间要高。那么,这段代码不是仍然按所有日期时间排序吗?因此,如果Curly的DateTime与2013年7月15日类似,那么这是否会早于Bob和Stan的DateTimes?@Zldamstr您可以根据您想要的结果对其进行修改。我将添加另一个查询,以便仅从程序员组获取项目。太好了!我只是把它改成OrderByDescending来满足我的需要。非常感谢你!我明白你的意思,但也有一些情况下,我不关心的另一个群体的约会时间可能比我所关注的群体的约会时间要高。那么,这段代码不是仍然按所有日期时间排序吗?因此,如果Curly的DateTime与2013年7月15日类似,那么这是否会早于Bob和Stan的DateTimes?@Zldamstr您可以根据您想要的结果对其进行修改。我将添加另一个查询,以便仅从程序员组获取项目。太好了!我只是把它改成OrderByDescending来满足我的需要。非常感谢你!
List<Tuple<string, string, DateTime>> myList = new List<Tuple<string,string,DateTime>>();

myList.Add(new Tuple<string, string, DateTime>("Bob", "Programmer", new DateTime(2013,6,20)));
myList.Add(new Tuple<string, string, DateTime>("Stan", "Programmer", new DateTime(2013, 6, 25)));
myList.Add(new Tuple<string, string, DateTime>("Curly", "Athlete", new DateTime(2013, 6, 20)));

var result = myList.Where(x => x.Item2.Equals("Programmer")).OrderByDescending(x => x.Item3).Take(1);