2014-03-27 33 views
0

這可能是非常基本的,但我們現在就去,因爲現在我無法解決這個問題。如何使用EF選擇使用DISTINCT和FOREIGN KEY在一起

I'm使用實體Frameword用於Oracle(管理驅動程序),並希望做讓所有以下:

我有2個數據庫表如下:

TABLE_USER 

    ID INTEGER 
    NAME STRING 
    AGE INTEGER 

Content: 

    0 JOHN 39 
    1 MARY 40 
    2 ALBERT 41 
    3 ROBERT 42 
    4 SARAH 43 
    5 PETER 44 



    TABLE_EVENTS 

    ID   INTEGER 
    EVENT_NAME STRING 
    USER_ID INTEGER (FOREIGN KEY TO TABLE_USER.ID) 

Content: 

    0 CREATE 1 
    1 CREATE 2 
    2 CREATE 5 
    3 DELETE 3 
    4 DELETE 0 
    5 CREATE 1 
    6 DELETE 3 
    7 CREATE 0 
    8 UPDATE 4 
    9 UPDATE 5 
    10 DELETE 1 

我需要得到所有DISTINCT其中TABLE_USER中的用戶年齡具有特定條件(如AGE <= 40)的TABLE_EVENTS的值。

這個例子可以給我下面的列表: CREATE DELETE

我的代碼應該是這樣的:

IQueryable<TABLE_USER> tableUser = dbContext.TABLE_USER; 
    IQueryable<TABLE_EVENTS> tableEvents = dbContext.TABLE_EVENTS; 

    /// 
    /// Build the query 
    /// 
    tableUserQuery = tableUser.Where(record => record => USER_ID == ??tableUser.ID?? && 
            ??tableUser.AGE < 30??).GroupJoin(???); 
    /// 
    /// Execute que query 
    /// 
    var dbList = query.ToList(); 

我一直在尋找羣組加入和其他的東西,但我不能,甚至人物如何建立此查詢,因此,所有從來就貼在骨架...

感謝任何形式的幫助。

回答

1

通常在2代表的外鍵連接,EF生成導航性能達到其他實體,您可以使用此查詢。

List<string> events = dbContext.TABLE_EVENTS.Where(te=>te.TABLE_USER.AGE < 30).Select(te=>te.EVENT_NAME).Distinct().ToList(); 

如果您沒有看到掛外國實體,則該查詢

List<string> events = dbContext.TABLE_EVENTS.Join(dbContext.TABLE_USERS, te=>te.USER_ID, tu=>tu.ID, (te,tu)=> te).Where(te=>te.TABLE_USER.AGE < 30).Select(te=>te.EVENT_NAME).Distinct().ToList(); 

上面的查詢基本上沒有內部連接的用戶ID,應用過濾器並得到不同的值。

+0

出現了外部實體鏈接,但是我收到以下編譯器錯誤:無法將類型'System.Linq.IQueryable '轉換爲'System.Linq.IQueryable '。一個顯式轉換存在(是否缺少強制轉換?)......這表明,錯誤與這兩個語句.... – Mendes

+0

那是因爲你不需要的IQueryable 了..結果是一個IQueryable 或列表基於如果你做了一個ToList()或者不是,則相應地更新答案。希望有所幫助。 –

+0

工作正常。感謝幫助。 – Mendes