我正在努力获得一份不是现有借款人的新潜在借款人名单。我的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()));
答案 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);