2011-12-18 104 views
1

使用傳統實體框架並使用ESQL進行查詢時,可以僅使用OFTYPE僅返回基本類型。如何在EF Code First中使用LinTY?

參見:http://msdn.microsoft.com/en-us/library/bb399295.aspx

在實體框架代碼首先,我已經繼承設置,其中B是A執行MyContext.Set<A>().OfType<A>()仍返回類型爲B的元素理想的一個亞型,我想打電話給MyContext.Set<A>().OfOnlyType<A>(),它會轉換方式與僅使用ESQL的OFTYPE相同。

我還發現我可以在where語句中使用is運算符,但是同樣會返回A和B實體。

我該如何寫一個linq表達式來過濾只有類型爲A的元素?

回答

5

在Linq-to-entities中,沒有辦法直接獲取A實例(相當於ONLY),除非您以某種方式從結果集中排除派生實例。例如:

var list = MyContext.Set<A>().Where(a => !(a is B)).ToList(); 
+1

ESQL的'OFTYPE'在問題中提供了一個可選的關鍵字'ONLY',它改變了行爲。問題是如何在ESQL中將其轉換爲LINQ。你的回答是正確的,除了「你的理解是錯誤的」評論和一個不必要的解釋。 – hvd 2011-12-18 12:37:14

+0

@hvd:謝謝。我修改了我的答案。 – 2011-12-18 12:47:00

+0

說有幾種刁鑽的類型。我將不得不排除他們呢?我想知道ESQL中的ONLY關鍵字在幕後做了什麼來避免這個問題? – 2011-12-18 17:10:22