我們在DBML文件中的下列測試模型:LINQ to SQL和自相關表
Model http://www.freeimagehosting.net/uploads/a86582498a.gif
測試用例有4條表中的記錄,1個父,3個孩子。我們正在尋找特定記錄的兄弟姐妹,包括具體記錄。
using (var db = new TestDataContext())
{
var query =
from f in db.Foos
where f.Name == "Two"
select f.Foo1.Foos; // get the record's parent's children
var foos = query.SelectMany(f => f); // project the EntitySet
Assert.AreEqual(3, foos.Count()); // passes
}
這將返回正確的項目有以下SQL:
SELECT [t2].[FooId],
[t2].[ParentFooId],
[t2].[Name]
FROM [dbo].[Foos] AS [t0]
INNER JOIN [dbo].[Foos] AS [t1] ON [t1].[FooId] = [t0].[ParentFooId]
CROSS JOIN [dbo].[Foos] AS [t2]
WHERE ([t0].[Name] = @p0)
AND ([t2].[ParentFooId] = [t1].[FooId])
我們想知道的CROSS JOIN,這顯然是中的SelectMany的結果?
有沒有另一種方法,我們應該這樣做,以便沒有CROSS JOIN?
因此,這是怎麼回事未指定離開,因爲一個聯合起來到SQL Server的類型? – blu 2010-02-05 14:43:52
是的。默認情況下,這是一個內部聯接。 – 2010-02-05 20:26:07
這是我的理解,','將離開確定加入到SQL Server;它可能是內部連接,也可能是交叉連接。如果沒有提到那個實施會很好。 – blu 2010-02-13 06:48:31