cho*_*bo2 5 c# linq linq-to-entities entity-framework
我有2个表彼此相关联
表A与表B具有1对多的关系,因此这会为每个表创建一个导航属性.
现在我需要检查表A(userName)中的值,我需要检查表B(ClubId)中的值.
所以在我看来它会是这样的
Join the tables together
Where A.userName == "bob" &&
where B.clubId == "Car"
// return the count.
Run Code Online (Sandbox Code Playgroud)
但现在我知道实体的东西它应该使连接不太常见,所以我想知道我是否可以通过连接来实现.
我试过这个
int count = Entity.TableA.where(a => a.userName == "bob" && a.TableB.where(i => i.ClubId == "Car")).Count();
Run Code Online (Sandbox Code Playgroud)
所以这不起作用,因为它不会返回正确的类型(第二个在哪里).这就是我的想法,我希望它能够完成的工作方式.
那它应该怎么样?
PS
我宁愿在Linq方法查询中完成一个例子,就像我上面做的那样.
假设您的EF模型具有用户和俱乐部之间的关系,可以执行以下操作:
var usersNamedBobInCarClub =
from A in User
from B in A.Clubs
where A.userName == "bob" &&
B.clubId == "Car"
select A;
Run Code Online (Sandbox Code Playgroud)
如果您希望用户和俱乐部的返回元素查看查询中的联接.
TableA在加入之前进行过滤可能会更有效:
var clubs = from a in Entity.TableA
where a.userName == "bob"
from b in a.TableB
where b.clubId == "Car"
select b;
var count = clubs.Count();
Run Code Online (Sandbox Code Playgroud)
您不必使用两个变量,为了清楚起见,这只是我的偏好。
或者在方法语法中你可以简化一点:
var count = Entity.TableA.Where(a => a.userName == "bob")
.SelectMany(a => a.TableB)
.Count(b => b.clubId == "Car");
Run Code Online (Sandbox Code Playgroud)
但是,我不确定 EF 是否理解这些特定的表达式。如果没有,编译器将像这样翻译上面的查询:
var count = Entity.TableA.Where(a => a.userName == "bob")
.SelectMany(a => a.TableB, (a,b) => new { a, b })
.Where(x => x.b.clubId == "Car")
.Count();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9823 次 |
| 最近记录: |