C#中的Linq查询以检索与列表相关的元素集

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

我们有一个包含随机索引的列表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 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)).To‌​List();
List index=newlist(){5,1,10,30};
var results=listB.Where((项,索引)=>index.Contains(索引)
&&item.Name==“Amar”)
.Select(x=>listB.IndexOf(x)).To‌​List();
编辑:要获取原始
列表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()