如何在.c#中的何处包含子查询?

如何在.c#中的何处包含子查询?,c#,sql,entity-framework,linq,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 =

我的简单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表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型

有人能帮我把查询写对吗?谢谢

像这样试试

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

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

您没有在
方法中筛选任何内容,而
方法中包含的内容也不正确,请尝试这种方法

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

我建议您阅读MSDN部分。

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

var npCardNums = dbContext.cardInformation.Where(a => a.country == 'NP')
                                          .Select(a => a.cardNum);
var query1 = dbcontext.deletedCards.Where(x => npCardNums.Contains(x.CardNumber));
我建议您阅读MSDN部分。

您也可以使用join

    var ans= from dc in deletedcards 
    join CI in cardInformation on dc.cardnum equals CI.cardNum
    where CI.coumtry='NP' select dc
您也可以使用join

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

我试过了,错误消失了,但最后在'x=>x.cardNumber'处出现了新错误,原因是:“无法将lambda表达式转换为'string'类型,因为它不是委托类型”。我修改了查询。您能试试这个吗?我试过了,错误消失了,但最后在'x=>x.cardNumber'处出现了新的错误,原因是:“无法将lambda表达式转换为'string'类型,因为它不是委托类型”我修改了查询。你能试试这个吗?看起来很管用!谢谢我一定会查看您提到的MSDN链接。:)看来成功了!谢谢我一定会查看您提到的MSDN链接。:)尽管OP要求使用子查询,但如本答案所示,采用使用联接的替代方法将导致SQL查询速度大大加快,尤其是在查询的表上设置了适当的索引时。好奇的人们可以在这里快速找到为什么联接比子查询更好的解释:尽管OP要求使用子查询,但按照本答案中的建议,采用使用联接的替代方法将导致SQL查询速度大大加快,特别是在查询表上设置了适当的索引的情况下。好奇的人们可以在这里快速了解为什么连接比子查询更好: