Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用多个连接和一个谓词将SQL转换为LINQ_C#_Sql_Sql Server_Linq_Join - Fatal编程技术网

C# 使用多个连接和一个谓词将SQL转换为LINQ

C# 使用多个连接和一个谓词将SQL转换为LINQ,c#,sql,sql-server,linq,join,C#,Sql,Sql Server,Linq,Join,我正在努力尝试基于以下SQL以LINQ或方法语法编写LINQ语句 SELECT vr.* FROM VisualReport vr JOIN VisualReportRoleList vrl ON vr.VisualReportSK = vrl.VisualReportSK JOIN Role r ON vrl.RoleSK = r.RoleID JOIN UserRoleList url ON r.RoleID = url.RoleID JOIN Users u ON url.UserID

我正在努力尝试基于以下SQL以LINQ或方法语法编写LINQ语句

SELECT vr.* 
FROM VisualReport vr
JOIN VisualReportRoleList vrl ON vr.VisualReportSK = vrl.VisualReportSK
JOIN Role r ON vrl.RoleSK = r.RoleID
JOIN UserRoleList url ON r.RoleID = url.RoleID
JOIN Users u ON url.UserID = url.UserID
WHERE u.ID = 1
我试过很多东西,但运气不好。我本打算在这里发布一些,但这让这篇文章读起来真的很混乱


这里有人能帮我吗?

连接模式是这样工作的

参数1。是要加入的名单

参数2。按左边的键(您的呼叫连接位置)

参数3。右键(您的加入目的地)

参数4。是结果选择器,用于选择结果

db.VisualReposts.Join(db.VisualRepostRoleLists, 
                      vr => vr.VisualReportSK,
                      vrl => vrl.VisualReportSK 
                      (vr, vrl) => new { vr, vrl}).Join(db.Roles, 
                                                       vrj => vrj.vrl.RoleSK,
                                                       r => r.RoleID,
                                                  vrj, r => new {vr = vrj.vr, 
                                                                vrl = vrj.vrl, 
                                                                role = r} )

  //follow the same patter for the rest of the joins.  
  // Also add your where clause, it might be a better idea to start 
  //from the users table so you can filter first
但是,如果所有内容都正确设置了外键,则不需要进行连接,只需访问ICollections即可。如果您可以或有外键,您可以像这样访问它们

var user = db.Users.Where(u => u.id == 1);

//everything should have an icollection now so you can access via
//user.UserRoleList.Roles ect or what ever you need

简单的一对一转换。LinqPad应该将其转换为查询的等效项

var result = (from vr in VisualReport
    join vrl in VisualReportRoleList on vr.VisualReportSK equals vrl.VisualReportSK
    join r in Role on vrl.RoleSK equals r.RoleID
    join url in UserRoleList on vrl.RoleSK equals url.RoleID
    join u in Users on url.UserID equals u.UserID
    where u.ID == 1
    select vr).ToList();

有一些很好的工具可以帮助你做到这一点。。在
LinqPad
上进行谷歌搜索,看看是否有免费的donwload试用版