【问题标题】:Linq with Lambda equivalent of SQLLinq 与 Lambda 等效的 SQL
【发布时间】:2014-06-07 20:01:17
【问题描述】:

我对实体框架比较陌生,我一直在尝试使用包含简单连接的 Lambda 编写 Linq 语句。我有三个表:Staff - StaffRole - Role。

我想要一个满足特定条件的特定角色的工作人员。用常规 SQL 编写它非常简单:

SELECT *
FROM Staff s
INNER JOIN StaffRole sr ON s.StaffId = sr.StaffId
INNER JOIN Role r ON sr.RoleId = r.RoleId
WHERE r.Description = 'SpecialisedHealthManager'
AND s.PrimaryShm = 0

现在,将它写在 Linq 语句中并没有给我太多的运气。我想应该是这样的:

var actingShm = db.Staff.Join(db.StaffRole,
                           inner => inner.StaffId,
                           outer => outer.Role,
                           (outer, inner) => new
                           {
                               StaffId = inner.StaffId,
                               FirstName = inner.Staff.FirstName,
                               Surname = inner.Staff.Surname,
                               SamAccountName = inner.Staff.SamAccountName,
                               RoleId = outer.Description
                           });

不用说,这不起作用..

【问题讨论】:

标签: c# sql linq entity-framework-4


【解决方案1】:

尝试以这种方式使用它:

var list = from s in Staff
join sr in StaffRole on s.StaffId equals sr.StaffId
join r in Role on sr.RoleId equals r.RoleId
where r.Description == 'SpecialisedHealthManager' && s.PrimaryShm == 0
select new
{
   StaffId = s.StaffId,
   FirstName = s.Staff.FirstName,
   Surname = s.Staff.Surname, 
   SamAccountName = s.Staff.SamAccountName,
   RoleId = r.Description
});

【讨论】:

    【解决方案2】:

    如果你真的想用方法语法 LINQ 做到这一点,请看这里:

    SO Multiple tables join with lambdas

    也看这里:

    http://msdn.microsoft.com/pl-pl/library/bb534675(v=vs.110).aspx

    用于连接扩展方法语法。您的代码中显示的用法是错误的。

    【讨论】:

      【解决方案3】:

      您应该设置关联,以便执行此操作...

      var actingShm = from s in db.Staff
                      from r in s.Roles
                      where r.Description == "SpecialisedHealthManager"
                      select new
                             {
                                 StaffId = s.StaffId,
                                 FirstName = s.FirstName,
                                 Surname = s.Surname,
                                 SamAccountName = s.SamAccountName,
                                 RoleId = r.Description
                             });
      

      您使用的是实体框架还是 Linq2SQL?

      【讨论】:

      • 在 google 上搜索有关使用实体框架的多对多关系的教程。我不知道你是想要数据库优先还是代码优先。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2013-05-19
      • 2015-09-14
      相关资源
      最近更新 更多