Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于另一个列表中的对象属性对列表进行排序_C#_Asp.net Mvc_Linq_Razor - Fatal编程技术网

C# 基于另一个列表中的对象属性对列表进行排序

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

我需要根据每个列表中对象的不同属性查找两个列表的公共对象(一个列表中的对象具有targetId属性),我需要查找targetId与第一个列表中对象Id匹配的所有对象。两个列表中的对象都具有一系列其他不同属性

第一个列表将定义匹配对象的顺序-只要两个列表的顺序相同,实际顺序并不重要。下面的[pseudocode]示例显示了我的意思,其中第二个列表按TargetId排序,以匹配第一个列表中的Id顺序:

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,我会尝试一下。我认为这个错误看起来很奇怪,因为我已经设置了测试列表,以确保每个对象都有匹配项。