如何在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()));
假设两个表都有一个名为"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);