C#中的Linq查询以检索与列表相关的元素集
我们有一个包含随机索引的列表A。我有另一个列表B,其中包含类对象。我想用列表A中的索引解析列表B,并使用Linq查找其中包含名称为Amar的对象 例如:C#中的Linq查询以检索与列表相关的元素集,c#,linq,C#,Linq,我们有一个包含随机索引的列表A。我有另一个列表B,其中包含类对象。我想用列表A中的索引解析列表B,并使用Linq查找其中包含名称为Amar的对象 例如: List<int> Indexes = new List<int>(); // This contains the random indexes List<Student> StuObj = new List<Student>(); Class Student { String n
List<int> Indexes = new List<int>(); // This contains the random indexes
List<Student> StuObj = new List<Student>();
Class Student
{
String name;
}
List index=new List();//它包含随机索引
List StuObj=新列表();
班级学生
{
字符串名;
}
现在,我想根据列表中存在的索引解析列表
StuObj
,并获取列表StuObj
中存在的StuObj
对象索引,其中名称为Amar
,您可以使用Linq来实现。,其中
具有提供元素索引的重载:
List<int> indexes = new List<int>() { 5, 1 , 10, 30 };
var results = listB.Where((item, index)=> indexes.Contains(index)
&& item.Name == "Amar")
.Select(x => listB.IndexOf(x)).ToList();
List index=newlist(){5,1,10,30};
var results=listB.Where((项,索引)=>index.Contains(索引)
&&item.Name==“Amar”)
.Select(x=>listB.IndexOf(x)).ToList();
编辑:要获取原始列表b中元素的索引,可以使用索引of(T)
方法。类似以下内容:
var result = listA
.Where(i => i >= 0 && i < listB.Count)
.Select(i => listB[i])
.FirstOrDefault(b => b.Name == "Amar");
我认为绝对没有理由使用线性搜索(因此速度慢)方法,如其他一些答案中所建议的Contains
和IndexOf
。假设您有两个列表,列表indexList和列表dataList,您可以使用如下选择:
indexList.Select(i => dataList[i]);
如果索引列表包含一个整数<0或>DATALIST的大小,你应该考虑你希望发生的事情。例如,您可以将无效条目替换为null,如:
indexList.Select(i => i < 0 || i >= dataList.Count ? null : dataList[i]);
这利用了获取项目索引的Select和Where重载。Where子句选择数据列表中的项目索引位于索引列表中的项目,以及项目名称为Amar的项目。然后,Select子句返回原始数据列表中项目的索引。这应该可以:
var result = Indexes
.Select(i => StuObj[i])
.Where(s => s.name = "Amar").ToList()
它执行快速索引查找以仅获取所需的对象。如果您知道只有一条记录,可以使用First
或First或default
而不是ToList
您能提供一些代码并给出一些示例吗?你有哪些类对象?你真的需要使用Linq吗?你是说你想在StuObj中找到元素,其中:StuObj中元素的索引在indexes中,学生的名字是Amar?如何获得object的索引而不是objects@G.T.您可以用替换.ToList()
代码>@G.T.您刚刚接受了一个产生错误结果的答案.Select((项,索引)=>index)
选择筛选集的索引,因此您将始终得到0,1,2,3等。。。直到元素数。这会给出错误的结果,因为上次选择会在筛选列表中生成索引。您是正确的,谢谢。修复了使用IndexOf的代码
indexList.Where(i => i>=0 && i < dataList.Count).Select(i => dataList[i]);
dataList.Where((item, index) => indexList.Contains(index) && item.Name == "Amar")
.Select(item => dataList.IndexOf(item));
var result = Indexes
.Select(i => StuObj[i])
.Where(s => s.name = "Amar").ToList()