我有一个相对简单的事情,我可以在SQL中轻松完成,但我正在尝试习惯使用Lambda表达式,并且很难。
这是一个简单的例子。基本上我有2张桌子。
tblAudit可能有一个关于tblAction的条目,其中Deleted标志设置为1。
我想要做的就是选择我们在tblAudit中没有删除条目的操作。所以SQL语句是:
Select tblAction.*
From tblAction LEFT JOIN tblAudit on tblAction.ActionID=tblAudit.ActionID
where tblAudit.Deleted <> 1
VB.Net的LINQ中的上述内容是什么?我试过了:
Context.Actions.Where(Function(act) Context.Audit
.Where(Function(aud) aud.Deleted=False AndAlso aud.ActionID=act.ActionID)).ToList
但这实际上是一个内连接类型场景,它要求tblAction中的每个条目在tblAudit中都有一个Entry。我正在使用Entity Framework Code First来进行数据库映射。有没有办法以你可以做到这一点的方式定义映射?
答案 0 :(得分:1)
你应该添加
Public Property Audits As DbSet<Audit>
进入你的动作实体类(注册那些表之间的关联)。
现在你可以写下你的意思了:
(From act in Context.Actions Where Not act.Audits.Any(Function(audit) audit.Deleted)).ToArray
相当于
Context.Actions.Where(Function(act) Not act.Audits.Any(Function(audit) audit.Deleted)).ToArray
让LINQ解析器执行艰难的SQL工作。