我想对查询 MULTIPLE TABLES 执行 LINQ NOT EXISTS。
Google 或 SO 上的所有示例都在处理两个表,我正在使用三个表,所以我作为 LINQ 的新手正在努力如何正确引用它们。
首先我尝试了这个 LINQ 查询
var nocertificates = (
from x in rmdb.t_certificates
from ce in rmdb.t_user_certificates
from u in rmdb.t_users
where u.id == ce.uid && ce.value != x.id
select x).AsEnumerable().Select(x => new ViewModelCheckBox()
{
Value = x.id.ToString(),
Name = x.name,
Checked = false
});
我使用了丑陋的 3 次,因为我不太擅长创建连接类型。但这给出了错误的结果,我意识到我必须选择NOT EXISTS
所以我在 T-SQL 中构建了一个新查询
这是它工作的 SQL 查询!
select distinct * from t_certificates tc
where NOT EXISTS
(
select distinct * from t_users tu, t_user_certificates tuc
WHERE tu.email = 'user@email.com'
and tu.id = tuc.[uid]
and tuc.value = tc.id
)
我将如何在 LINQ 中做到这一点?
这就是问题,我将为此奖励我的答案!
但!
当我们这样做时...我真的很好奇答案..是否可以执行一个 LINQ 查询,该查询返回一个 Ienumerable 与那些 EXISTS 和 NOT EXISTS 导致一个对象在选中时将持有不同的值属性
EXISTS -> CHECKED = true
不存在 -> CHECKED = false
这就是我创建对象的方式。
.Select(x => new ViewModelCheckBox()
{
Value = x.id.ToString(),
Name = x.name,
Checked = this should be different based on exists or not
});