我有類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