C# Linq Where子句根据不同列表的结果生成列表
我正在尝试使用C# Linq Where子句根据不同列表的结果生成列表,c#,linq,ado.net,C#,Linq,Ado.net,我正在尝试使用Where子句生成一个列表,该子句具有来自不同列表的属性。我知道我可以使用.Include(),类似于使用实体框架时的SQL连接,但我没有使用实体框架,因此我认为它不起作用。我有: List<Problem> problems = MethodToCallDbAndGenerateList(); //ado.net problems = problems.Where(x => x.Property1 == "value").ToList();
Where
子句生成一个列表
,该子句具有来自不同列表
的属性。我知道我可以使用.Include()
,类似于使用实体框架时的SQL连接,但我没有使用实体框架,因此我认为它不起作用。我有:
List<Problem> problems = MethodToCallDbAndGenerateList(); //ado.net
problems = problems.Where(x => x.Property1 == "value").ToList();
//remaining logic
List<Solved> solved = MethodToCallDb()
.Where(x => x.SolvedId == problems.ProblemId)
.ToList();
//error happens in Where(...problems.ProblemId);
//List<Problem> does not contain a definition for ProblemId
List problems=methodtocalldband generatelist()//ado.net
问题=问题。其中(x=>x.Property1==“value”).ToList();
//剩余逻辑
List solved=MethodToCallDb()
.Where(x=>x.SolvedId==problems.ProblemId)
.ToList();
//错误发生在以下位置(…problems.ProblemId);
//列表不包含ProblemId的定义
错误表明列表
不包含ProblemId
,但我的类中确实有该属性。所以我不确定我为什么会犯这样的错误
如何根据从中筛选的结果生成我的列表
.Where(x=>x.SolvedId==problems.SolvedId)
使用LINQ to对象,您可以使用Enumerable.Join
方法在两个列表
之间创建连接,并仅返回匹配的成员:
List<Problem> problems = MethodToCallDbAndGenerateList()
.Where(x => x.Property1 == "value")
.ToList();
List<Solved> solved = MethodToCallDb()
.Join(problems, s => s.SolvedId, p => p.ProblemId, (s,p) => s)
.ToList();
注意:如果只创建要在联接中使用的问题
,最好跳过创建列表
,只需执行以下操作:
var problemIDs = MethodToCallDbAndGenerateList()
.Where(x => x.Property1 == "value")
.Select(p => p.ProblemId)
.ToHashSet();
在C#中,类型就是一切。
问题的类型为列表
。类列表
没有名为ProblemId
的属性。列表
中的单个成员属于问题类
,他们很可能拥有该属性,但这与列表
无关。那么,您要针对存储在列表中的问题集测试什么呢?我想您刚刚回答了我的问题。我将不得不稍后再看,但我猜我将能够循环并拥有.Where(..…problems.ElementAt(I).ProblemId)代码>我需要对它进行索引,得到一个实例:<代码>问题。问题ID <代码>。在C语言中,这将是<代码>问题[i]。你把我引向了正确的方向。基本上没有使用实体框架,也没有使用.Include()
我基本上是在尝试从数据库中对两个表执行连接。有了ef,我可以做\u context.Problem.Include(x=>x.Solved.ToList()
,但我没有使用ef,因此,我复杂地尝试使用两个独立的List
LINQ to对象来执行类似的操作,就像EF一样支持join-您可以使用join
或在查询语法中join
中等于..to
。感谢我不知道Enumerable.join。ToHashSet()也是一个好主意。@jah LINQ to objects几乎具有LINQ to数据库等的所有功能;它还可以使用查询语法和流畅语法。
var problemIDs = MethodToCallDbAndGenerateList()
.Where(x => x.Property1 == "value")
.Select(p => p.ProblemId)
.ToHashSet();