新手on linq到sql lambda表达式后面的语句包括两个

时间:2012-09-28 16:15:30

标签: c# linq lambda

    var Query2 = from x in CoreDatabase.Set<tblPerson>()
                 .Include(a => a.tblApplicationInterface.Select(b => b.tblApplicationName)
                 .Where(c => c.AppplicationName == "MshHumanResources"))

                 select x;

我得到Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。 我只是想写

这里有用的东西:

Select * 
From tblPerson a INNER JOIN tblApplicationInterface b 
on a.id = b.id
INNER Join tblApplicationName c
ON b.fkid=c.id
Where b.ApplicationName like 'MshHumanResources'

3 个答案:

答案 0 :(得分:2)

这不是Include的工作方式。您想要使用join代替:

var Query2 = from a in CoreDatabase.Set<tblPerson>()
             join b in CoreDatabase.Set<tblApplicationInterface>() on a.id equlas b.id
             join c in CoreDatabase.Set<tblApplicationName>() on b.fkid equals c.id
             where c.AppplicationName == "MshHumanResources"
             select a;

这只是从A中选择列 - 如果要从其他表中选择列,请创建一个类来组合所需的字段或使用匿名类型。

答案 1 :(得分:0)

试试这个:

var Query2 = CoreDatabase.Set<tblPerson>
                 .Include("tblApplicationInterface")
                 .Include("tblApplicationInterface.tblApplicationName")
                 .Where(x => x.ApplicationName == "MshHumanResources");

答案 2 :(得分:0)

直接,你可以说

var people = CoreDatabase.Set<tblPerson>().Where( p => 
p.tblApplicationInterface.tblApplicationName.ApplicationName == "MshHumanResources" );

如果我正确理解您的导航属性。这将选择应用程序界面的应用程序名称为MshHumanResources的人。