如何在C#中的.where中包含子查询?

时间:2018-12-17 05:20:10

标签: c# sql entity-framework linq

我简单的SQL查询是

select * 
from deletedCards 
where cardNumber in (select cardNum from cardInformation 
                     where country = 'NP')

,我需要用C#编写。我走了这么远:

var Query1 = dbContext.deletedCards;
Query1.Where(x => dbContext.cardInformation.Where(a => a.country== 'NP')).Select(a => a.cardNum).Contains(x => x.cardNumber);

但这显示了错误

  

无法将lambda表达式转换为预期的委托类型,因为该块中的某些返回类型不能隐式转换为委托返回类型

有人可以帮助我正确编写查询吗?谢谢!

3 个答案:

答案 0 :(得分:1)

您没有在Where方法中过滤任何内容,而您的Contains方法也不正确,请尝试这种方式。

var npCardNums = dbContext.cardInformation.Where(a => a.country == 'NP')
                                          .Select(a => a.cardNum);
var query1 = dbcontext.deletedCards.Where(x => npCardNums.Contains(x.CardNumber));

我建议您阅读MSDN上的Language Integrated Query (LINQ)部分。

答案 1 :(得分:1)

您也可以使用加入

    var ans= from dc in deletedcards 
    join CI in cardInformation on dc.cardnum equals CI.cardNum
    where CI.coumtry='NP' select dc

答案 2 :(得分:0)

尝试这样。

var Query1 = dbContext.deletedCards;
Query1.Where(x=> dbContext.cardInformation.Where(a=>a.country== 'NP').Contains(x=>x.cardNumber)).Select(a=>a.cardNum).ToList();