2013-11-21 38 views
0

在實體框架5 LINQ查詢中,不確定是否有正確的術語,但有沒有任何方法可以包含表中不存在的「編碼字段」?在LINQ查詢中包含編碼的字段值(EF 5)

例如,在SQL你可以這樣做:

SELECT 'Ledger' AS type, (...) FROM table 

,以便查詢結果包括一個名爲與價值「萊傑的「類型」字段。有沒有辦法在LINQ查詢中做到這一點?

在你問爲什麼它必須在查詢中,這是因爲查詢是多個表的聯合,我需要指定數據來自哪個表。沒有這個,我需要分別查詢每一個然後合併它們。

+0

不應將您的類設計基於數據庫模式。特別是當您將對象傳遞到更高層時。 –

+0

@ P.Brian.Mackey它不是,我有一個業務層類的報告,我試圖填充查詢結果。 – amnesia

回答

3

是的,你完全可以做到這一點。

p.s.w.g使用了被稱爲匿名類型的東西。基本上你可以即時定義查詢的結果。 正如你可以在他的回答看,在表達式語法,這看起來像Select(r => new { type = "Ledger", ... });

在查詢語法,它看起來像這樣:

from xxx in y 
select new { type = "Ledger" }; 

新的背後,有沒有類/類型或任何東西。類型都沒有定義。但它會自然地以字符串形式編譯。

在另一方面,你可以定義自定義視圖模型類此

public class CustomResultVM 
{ 
    //ignoring getter and setter 
    public int Id; 
    public string type; 
    public string name; 
} 

你選擇現在將強類型的,像這樣:

Select(r => new CustomResultVM 
{ 
    Id = r.xxx, 
    type = "Ledger", 
    Name = r.xxxx 
}); 

//query snytax 
from xxx in y 
select new CustomResultVM 
     { 
      Id = r.xxx, 
      type = "Ledger", 
      Name = r.xxxx 
     }; 

兩種方式都是有效的,它依賴在任何時間和地點你需要什麼。

+1

我完全忘了你可以這樣做,謝謝! – amnesia

3

當然,你可以。它看起來有點像這樣:

var results = dbContext.Table.Select(r => new { type = "Ledger", ... }); 

,或者您需要一個命名的類型,這樣的事情應該工作:

public class UnionResult 
{ 
    string Type { get; set; } 
    ... 
} 

var results = dbContext.Table.Select(r => new UnionResult { Type = "Ledger", ... }); 
+0

+1,因爲這是他要求的。但很難想象匿名類型是單一應用程序之外的正確解決方案。因爲他們不能被退回。 –

+0

@ P.Brian.Mackey夠了。我已經更新了我的答案,以包含指定類型作爲替代方案。 –

+0

@ p.s.w.g.這使得我們兩個。我明確回答自己,因爲我認爲,延長你的回答是一個好主意 – Marco