Day*_*ker 21 c# entity-framework
我有两个表 - "客户"表和"黑名单"客户表.当我将客户列入黑名单时,我将customerid作为外键放入Blacklist表.
我想要的是获得不在BlackList表中的CusId和Name.
我如何编写此实体框架C#?
Customer
---------
(CusId,Name,Telephone,Email)
Blacklist
---------
(CusId)
Run Code Online (Sandbox Code Playgroud)
Tim*_*ers 43
你想要的是如下:
db.Customers
.Where(c => !db.Blacklists
.Select(b => b.CusId)
.Contains(c.CusId)
);
Run Code Online (Sandbox Code Playgroud)
EF很乐意将其变成一个运行良好的子查询.
此模式适用于静态列表(创建IN(a, b, c)
表达式)以及其他表.您可以使用它来检查是否列在列表中.
如果你想测试它并看到它生成的SQL,我强烈推荐LINQPad(它是免费的).这就是我用来测试LINQ中的小想法的原因.
小智 6
这样的事情怎么样:
var subselect = (from b in BlackList select b.CusId).ToList();
var result = from c in Customer where !subselect.Contains(c.CusId) select c;
Run Code Online (Sandbox Code Playgroud)
Any() 是最好的性能:
db.Customers.Where(c => !db.Blacklists.Any(b => b.CusId == c.Id));
Run Code Online (Sandbox Code Playgroud)
如果您还需要黑名单列,请使用条件连接:b.CusId == c.Id
归档时间: |
|
查看次数: |
18924 次 |
最近记录: |