如何通过MVC 5中另一个表中的另一个列过滤db.table?

时间:2016-01-05 21:49:46

标签: c# entity-framework linq

我正在努力获得一份不是现有借款人的新潜在借款人名单。我的MVC应用程序中有两个表使用EF 5映射。两个表都有一个名为client_Name;

的字段
var existingBorrower = from s in db.ExistingBorrower select s.client_Name;

我可以确认existingBorrower.ToList()返回现有借方的项目列表。

我无法获得以下代码。我试图排除现有的借用者列表而不仅仅是一个项目。

var newBorrowers = db.AllClients.Where(x => !x.CLIENT_NAME.Contains(existingClients.AsEnumerable()));

5 个答案:

答案 0 :(得分:1)

假设两个表都有一个名为“ID”的客户端密钥,该密钥是唯一的,并且对于两个表中的一个客户端具有相同的值,或者它可能是一个表中的主键和第二个表中的外键: / p>

var existingIds = db.ExistingBorrower.Select(x => x.ID).ToList();

var newBorrowers = db.AllClients.Where(x => !existingIds.Contains(x.ID));

此查询将在SQL中转换为条件

WHERE ID NOT IN (val1, val2 ,val3, ...)

答案 1 :(得分:0)

您可以使用第一个查询来获取列表并进行比较

List<string> existingBorrowers = (from s in db.ExistingBorrower 
                                  select s.client_Name).ToList();

List<string> newBorrowers = (from a in db.AllClients 
                             where !existingBorrowers.Contains(a.client_Name)
                             select a.client_Name).ToList();

答案 2 :(得分:0)

您可以使用以下内容获取新借款人列表

var existingBorrowers = existingBorrower.ToList();
var newBorrowers = db.AllClients.Where(x => existingBorrowers.All(n => n != x)).ToList();

答案 3 :(得分:0)

您可以在一个查询中执行此操作:

var existingBorrowers = db.AllClients
                          .Where(clnt => !db.ExistingBorrower
                                         .Any(eb => eb.client_Name == clnt.CLIENT_NAME));

因此,您正在寻找名称不存在的客户端作为ExistingBorrower。我假设client_Name唯一地标识了一个客户端(这对于使其正常工作是绝对必要的)。

答案 4 :(得分:0)

您可以执行外部联接并仅获取非匹配记录,例如

var existingBorrower = from s in db.ExistingBorrower select s.client_Name;

var newBorrowers = db.AllClients
                   .GroupJoin(existingBorrower.ToList(), 
                              i => i.CLIENT_NAME, 
                              o => o.CLIENT_NAME,
                              (allClient, brrower) => new {allClient, brrower})
                   .SelectMany(z => z.brrower.DefaultIfEmpty(),
                      (x, y) => new
                        {
                            ClientName = x.allClient.CLIENT_NAME,
                            Brrower = y

                        }).Where(b => b.Brrower == null);