C# 基于另一个列表中的对象属性对列表进行排序
我需要根据每个列表中对象的不同属性查找两个列表的公共对象(一个列表中的对象具有targetId属性),我需要查找targetId与第一个列表中对象Id匹配的所有对象。两个列表中的对象都具有一系列其他不同属性 第一个列表将定义匹配对象的顺序-只要两个列表的顺序相同,实际顺序并不重要。下面的[pseudocode]示例显示了我的意思,其中第二个列表按TargetId排序,以匹配第一个列表中的Id顺序:C# 基于另一个列表中的对象属性对列表进行排序,c#,asp.net-mvc,linq,razor,C#,Asp.net Mvc,Linq,Razor,我需要根据每个列表中对象的不同属性查找两个列表的公共对象(一个列表中的对象具有targetId属性),我需要查找targetId与第一个列表中对象Id匹配的所有对象。两个列表中的对象都具有一系列其他不同属性 第一个列表将定义匹配对象的顺序-只要两个列表的顺序相同,实际顺序并不重要。下面的[pseudocode]示例显示了我的意思,其中第二个列表按TargetId排序,以匹配第一个列表中的Id顺序: firstList = [{name: a, id:1}, {name: b, id:2}, {n
firstList = [{name: a, id:1}, {name: b, id:2}, {name: c, id:3}]
secondList = [{name: d, targetId: 2}, {name:e, targetId: 3}, {name: f, targetId: 1}]
sortedList = [{name: f, targetId: 1}, {name:d, targetId: 2}, {name: e, targetId: 3}]
我原以为下面的方法会奏效,但我得到的序列不包含任何元素错误,即使我知道每个对象在另一个列表中都有匹配项。我尝试过就地排序,但没有成功
List<object> firstList; // objects have an Id
List<object> secondList; // objects have a TargetId property
List<object> sortedList = new List<object>(); // the new list to store matched objects
foreach (object o in firstList) {
sortedList.Add(secondList.Where(x => x.TargetId == o.Id).First()); // should only return one object, but First() just in case
}
foreach (object o in sortedList) {
//do something with the ordered list
}
List firstList;//对象有一个Id
List secondList;//对象具有TargetId属性
List sortedList=new List();//存储匹配对象的新列表
foreach(firstList中的对象o){
sortedList.Add(secondList.Where(x=>x.TargetId==o.Id).First());//应该只返回一个对象,但First()以防万一
}
foreach(sortedList中的对象o){
//对已排序的列表执行某些操作
}
我建议将第一个循环转换为Linq语句。设置它的方式很容易出现修改后的闭包问题:
var sortedList = firstList.Select(o =>
secondList.First(x => x.TargetId == o.Id))
.ToList();
我不确定“sequence contains no elements”(序列不包含任何元素)错误可能来自于First()
——您确定firstList
中没有与secondList
中不匹配的元素吗?下面是一个很好的双重检查(FirstOrDefault
而不是First
,带有空检查):
我建议将第一个循环转换为Linq语句。设置它的方式很容易出现修改后的闭包问题:
var sortedList = firstList.Select(o =>
secondList.First(x => x.TargetId == o.Id))
.ToList();
我不确定“sequence contains no elements”(序列不包含任何元素)错误可能来自于First()
——您确定firstList
中没有与secondList
中不匹配的元素吗?下面是一个很好的双重检查(FirstOrDefault
而不是First
,带有空检查):
我建议将第一个循环转换为Linq语句。设置它的方式很容易出现修改后的闭包问题:
var sortedList = firstList.Select(o =>
secondList.First(x => x.TargetId == o.Id))
.ToList();
我不确定“sequence contains no elements”(序列不包含任何元素)错误可能来自于First()
——您确定firstList
中没有与secondList
中不匹配的元素吗?下面是一个很好的双重检查(FirstOrDefault
而不是First
,带有空检查):
我建议将第一个循环转换为Linq语句。设置它的方式很容易出现修改后的闭包问题:
var sortedList = firstList.Select(o =>
secondList.First(x => x.TargetId == o.Id))
.ToList();
我不确定“sequence contains no elements”(序列不包含任何元素)错误可能来自于First()
——您确定firstList
中没有与secondList
中不匹配的元素吗?下面是一个很好的双重检查(FirstOrDefault
而不是First
,带有空检查):
谢谢McGarnagle-我会试一试。我认为这个错误看起来很奇怪,因为我已经设置了测试列表来确保每个对象都匹配。谢谢McGarnagle-我会试一试。我认为这个错误看起来很奇怪,因为我设置了测试列表来确保每个对象都匹配。谢谢McGarnagle-我会试一试。我认为这个错误看起来很奇怪很奇怪,因为我已经设置了测试列表,以确保每个对象都有匹配项。谢谢McGarnagle,我会尝试一下。我认为这个错误看起来很奇怪,因为我已经设置了测试列表,以确保每个对象都有匹配项。