2016-11-18 87 views
0

我有3個表之間這樣LINQ加入返回的IQueryable

enter image description here

我想有一個給定類型表1的參數的方法和的DbContext的關係我得到的所有相關從表3 通過表2

這裏是我的實現

public static IQueryable<table3> GetRows(
    EntitiesContext context, 
    table1 row) 
{ 
    var table3Rows = 
    from t2 in row.table2 
    join t3 in context.table3 on t2.IdTable3 equals t3.Id 
    select t3; 

    return table3Rows; 
} 

這種方法的問題是,我無法回報table3Rows因爲它是IEnumerable的IQueryable的

是否有任何解決方法可以返回IQueryable何時使用加入

我需要IQueryable,因爲我打算對結果做一些其他查詢。

+0

檢查這個帖子 - https://blog.hompus.nl/2010/08/26/joining-an-iqueryable-with-an-ienumerable/#gs.CQPGsx4 – SilentCoder

回答

5

你不是要能夠,如果你有一個已經物化Table1對象使用導航屬性。如果你有IQueryable<Table1>那麼你可以使用你使用的一般方法,結果自然就是IQueryable<Table3>

既然你有一個物化錶行你需要查詢數據庫爲Table2項目,而不是使用導航屬性。

public static IQueryable<table3> GetRows(
    EntitiesContext context, 
    table1 row) 
{ 
    var table3Rows = 
    from t2 in context.table2 
    where row.Table2Id == t2.Id 
    from t3 in t2.Table3 //here we can use a navigation property, since it's not on a materialized object. 
    select t3; 

    return table3Rows; 
} 
+0

這並不編譯。 –

+1

@TamasIonut爲什麼不呢?很明顯,我已經對OP的模式做了一些假設,可能需要根據他的具體名稱進行調整,但前提是這裏很重要,這並不是有缺陷的。 – Servy

+0

第一個「from」後面的「on」關鍵字 –