我有类Foo
和Bar
:如何做一个子查询中的LINQ
public class Foo
{
public int Id {get;set;}
public IEnumerable<Bar> Bars {get;private set;}
}
public class Bar
{
public int Id {get;set;}
public string Type {get;set;}
public string Description {get;set;}
}
这两个类映射到数据库中的表在可预见的“Bar
有外键Foo
”的一种方式。 (如果需要,我可以提供FluentNHibernate映射)。
我想编写一个LINQ查询,做的这相当于:
SELECT FOOS.*, (SELECT Description FROM BARS WHERE BAR.FOOID = FOO.ID AND BAR.TYPE = 'Irish')
FROM FOOS
WHERE FOO.ID = 1
我将如何做到这一点?
是的,我知道如果Foo
有多个爱尔兰Bar
(尽管我可以使用TOP 1
类型的语法来保护它),查询将会中断。是的,我的意思是使用子查询而不是联接。
编辑:
var foosWithIrishBarDescription = FooRepository.All.Where(x => x.Id == 1).Select(x=> new {FooId = x.Id, IrishBarDescription = x.Bars.Where(y => y.Type == "Irish").Select(y => y.Description)});
但我得到的错误“方法‘选择:
这就是我想到目前为止’未实现。”这不能在Linq中实现NHibernate吗? (我使用2.1)。
这会导致两个SELECT到数据库不会吗? – David 2011-03-30 10:01:27
它不会。 (由于延期执行)。 – 2011-03-30 10:23:17
谢谢你指出我没有命名集合!我现在纠正了。我会检查你现在做的方式。 – David 2011-03-30 10:39:33