C# 根据条件比较两个iQueryTables
我有两个iQueryTables A和B。我需要根据A和B中可用的id从A中选择所有列,并且在B列表中应用更多条件。在这里,我不需要从B中选择,我只需要从a中选择,但基于B上应用的条件。我尝试了下面的linq查询,但从性能角度看,加载数据至少需要18秒,这太长了。我正在尝试重构linq查询,但未能进行筛选。下面我提供了我的代码,该代码正在运行,但加载时间太长C# 根据条件比较两个iQueryTables,c#,linq,linq-to-sql,linq-to-entities,C#,Linq,Linq To Sql,Linq To Entities,我有两个iQueryTables A和B。我需要根据A和B中可用的id从A中选择所有列,并且在B列表中应用更多条件。在这里,我不需要从B中选择,我只需要从a中选择,但基于B上应用的条件。我尝试了下面的linq查询,但从性能角度看,加载数据至少需要18秒,这太长了。我正在尝试重构linq查询,但未能进行筛选。下面我提供了我的代码,该代码正在运行,但加载时间太长 IQueryable<A_LIST> query = ctx.getA(); IQueryable<B_List>
IQueryable<A_LIST> query = ctx.getA();
IQueryable<B_List> parts = ctx.getB();
query = (from q in query
join s in parts
on q.LIST_NO equals s.LIST_NO
where s.TAG == "PART00213" && s.STATUS == "NEW"
select q).Distinct();
试试这个:
IQueryable<A_LIST> query = ctx.getA();
var partsIds = ctx.getB().Where(s=>s.TAG == "PART00213" && s.STATUS == "NEW").Select(s=>s.LIST_NO);
query = query.Where(q=>partsIds.Contains(q.LIST_NO));
IQueryable query=ctx.getA();
var partsIds=ctx.getB()。其中(s=>s.TAG==“PART00213”&&s.STATUS==“NEW”)。选择(s=>s.LIST\u NO);
query=query.Where(q=>partsIds.Contains(q.LIST_NO));
您只是忘记将连接条件添加到任何
:和&x.LIST\u NO==m.LIST\u NO
您能告诉我在哪里添加该条件吗。我尝试过它抛出错误query=query.Where(m=>parts.Any(x=>x.TAG==“PART00213”&&x.STATUS==“NEW”&&x.LIST\u NO==m.LIST\u NO))代码>谢谢,成功了!
IQueryable<A_LIST> query = ctx.getA();
var partsIds = ctx.getB().Where(s=>s.TAG == "PART00213" && s.STATUS == "NEW").Select(s=>s.LIST_NO);
query = query.Where(q=>partsIds.Contains(q.LIST_NO));