讓我們假設我有一個名爲Foo的表,主鍵爲FooID和一個整數非唯一列Bar。出於某種原因,在SQL查詢中我不得不多次,連接表美孚與本身是這樣的:實體框架,如何用LinQ手動生成內部連接到實體
SELECT * FROM Foo f1 INNER JOIN Foo f2 ON f2.Bar = f1.Bar INNER JOIN Foo f3 ON f3.Bar = f1.Bar...
我必須通過LINQ實現這一目標,以實體。
做
ObjectContext.Foos.Join(ObjectContext.Foos, a => a.Bar, b => b.Bar, (a, b) => new {a, b})
給我LEFT OUTER在結果查詢JOIN,我需要內部聯接,這是非常關鍵的。
當然,如果在edmx中,我可能成功地將Foo與它自己的許多關聯作爲必要添加,然後在我的代碼中使用它們,實體框架將爲每個關聯替換正確的內連接。問題是,在設計時我不知道我需要多少連接。好的,一種解決方法是儘可能多地添加合理的...
但是,如果沒有別的,從理論的角度來看,是否有可能通過EF創建內部連接而不明確定義關聯?
在LINQ to SQL有一個(有點怪異)的方式通過羣組加入做到這一點,是這樣的:
ObjectContext.Foos.GroupJoin(ObjectContext.Foos, a => a.Bar, b => b.Bar, (a, b) => new {a, b}).SelectMany(o = > o.b.DefaultIfEmpty(), (o, b) => new {o.a, b)
我只是試圖在EF,訣竅這裏是行不通的。它仍然爲我生成外部連接。
任何想法?