Nev*_*arn 5 linq entity-framework
我有两个实体,用户和友谊,看起来像:
public class User
{
public int UserId { get; set; }
(...)
}
public class Friendship
{
public int SenderId { get; set; }
public int ReceiverId { get; set; }
(...)
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个简单的查询,在SQL中看起来像:
SELECT * FROM Users as U
INNER JOIN Friendships as F ON U.UserId = F.ReceiverId OR U.UserId = F.SenderId
Where U.Nick != VARIABLE
Run Code Online (Sandbox Code Playgroud)
换句话说,我想选择用户的所有朋友.
我无法做到这一点.我找到了解决方案,其中一个用union创建两个单独的连接查询并且它可以工作 - 但是向db创建这样的查询效率不高.
LINQ 中的联接始终是等值联接。基本上你需要多个from子句和一个where子句:
var query = from u in db.Users
where u.Nick != variable
from f in db.Friendships
where u.UserId == f.ReceiveId || u.UserId == f.SenderId
select ...;
Run Code Online (Sandbox Code Playgroud)
现在,在 LINQ to Objects 中可能有更有效的方法来执行此操作 - 但我希望基于 SQL 的 LINQ 提供程序生成一个具有足够好的执行计划的查询。它实际上可能不会在 SQL 中创建 JOIN,但我希望它与您显示的联接具有相同的执行计划。
| 归档时间: |
|
| 查看次数: |
2719 次 |
| 最近记录: |