关于特定属性的EF6 IN子句

时间:2017-08-03 18:41:55

标签: c# entity-framework-6

早上好,

我在使用EF查询时遇到问题。这就是我想要做的。

首先我要提取一个ID列表,如下所示(ID包含在x.MappingAccts实体中):

Entities.DB1.Mapping mapping = null;
using (var db = new Entities.DB1.DB1Conn())
{
    mapping = db.Mappings.Where(x => x.Code == code).Include(x => x.MappingAccts).FirstOrDefault();
}

稍后,我试图针对上面提到的Id列表(基本上是IN子句)对不同的数据库进行查询:

using (var db = new Entities.DB2.DB2Conn())
{
    var accounts = db.Accounts.Where(mapping.MappingAccts.Any(y => y.Id == ?????????)).ToList();
}

正如你所看到的,我只是对此有所了解。

基本上我需要做的是根据它的ID列查询Accounts表,并拉出与mapping.MappingAccts.Id列匹配的所有记录。

我发现的大多数示例很好地解释了如何针对单维数组执行此操作,但我希望比较特定列。

任何帮助都会很棒。

猪兔

2 个答案:

答案 0 :(得分:1)

使用IEnumberable.Contains

生成IN子句

从第一个DB1上下文,实现Id的列表

var idList = mapping.MappingAccts.Select(m => m.Id).ToList();

然后在第二个上下文中查询id的实现列表

var accounts = db.Accounts.Where(a => idList.Contains(a.Id)).ToList();

您可能遇到的唯一问题是您在第一个列表中获得的ID数量。您可以使用sql查询达到限制。

答案 1 :(得分:0)

这将给出包含MappingAccts

所包含的ID的帐户列表
using (var db = new Entities.DB2.DB2Conn())
{
    var accounts = db.Accounts.Where(s => mapping.MappingAccts.Any(y => y.Id == s.Id)).ToList();
}