如何在MVC 5中通过另一个表中的另一列来筛选db.table

本文关键字:一列 db 筛选 table MVC 另一个 | 更新日期: 2023-09-27 18:29:08

我正在尝试获得一份新的潜在借款人列表,这些借款人不是现有的借款人。我的MVC应用程序中有两个表是使用EF5映射的。两个表都有一个名为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()));

如何在MVC 5中通过另一个表中的另一列来筛选db.table

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

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, ...)

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

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();

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

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

您可以在一个查询中完成此操作:

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

因此,你正在寻找的客户的名字不存在作为现有借款人。我假设client_Name唯一地标识一个客户端(这是正确工作所必需的)。

也许您可以执行外部联接,只获取等不匹配的记录

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);