2015-08-08 54 views
1

我有一個實體有一個字段,我不想有時返回。實體框架,獲取實體的一部分

我現在將它設置爲null。有沒有一種方法可以在查詢本身中指定它,而不是像我在這裏那樣清除它?

public async Task<IQueryable<XYZXY>> GetStuff() 
    { 
      histories = 
       _db.Stuffs 
        .Where(n => n.NationId == User.NationId) 
        .OrderBy(x => x.DateSent); 
      await histories.ForEachAsync(d => d.Attachment = null); 
      return histories; 

    } 
+2

爲什麼不只是在查詢中選擇感興趣的列? – trashr0x

+0

這一切都取決於'Attachment'是什麼,以及你需要排除它的原因。導航屬性和更多可以改變你如何做到這一點,而無需創建新的對象。 – Eris

+0

使用*表分割*。 –

回答

1

你在找什麼叫做投影,這是你想從服務器投影到你的結果集中的東西。

在EF投影中,您的查詢的選擇行與您所做的任何包含的組合完成。

如果附件是導航屬性訪問的第二個表,它不會被當前查詢返回(IE將爲空),除非您進行延遲加載(通常由nav屬性上的virtual關鍵字表示,例如public virtual Attachment Attachment {get;set;}) 。如果附件一列投影是更復雜

你有2個選擇,使用annonomous類型如:

_db.Stuffs 
    .Where(n => n.NationId == User.NationId) 
    .OrderBy(x => x.DateSent) 
    .Select(x=> new { A = x.A, B = x.B .... /*Dont list attachment*/}); 

或重用現有對象

_db.Stuffs 
    .Where(n => n.NationId == User.NationId) 
    .OrderBy(x => x.DateSent) 
    .Select(x=> new Stuff { A = x.A, B = x.B .... /*Dont list attachment*/}); 

待辦事項自定義投影不會跟蹤如此改變一個屬性和調用保存不會工作。