2009-02-25 108 views
11

是否有一種方法可以將屬性添加到Linq查詢結果而非以下對象中?LINQ - 將屬性添加到結果

var query = from x in db.Courses 
       select new 
       { 
        x.OldProperty1, 
        x.OldProperty2, 
        x.OldProperty3, 
        NewProperty = true 
       }; 

我想這樣做,而不列出我的對象的所有當前屬性。有很多屬性,我不想在更改我的類時更新此代碼。

我仍然在學習LINQ,我很欣賞你的建議。

+0

這是一個愚蠢的問題。我現在更清楚了。自動映射庫只是等待發生的錯誤。不要懶惰。編寫映射代碼。 – 2015-10-07 00:25:33

回答

7

與部分類添加:

public partial class Courses 
{ 
    public String NewProperty { get; set; } 
} 

然後你就可以將其指定你所創建的對象之後。

+0

這是編譯時間。這不是要求運行時間的問題,因此這不是問題的有效答案嗎? – peSHIr 2009-02-26 11:11:17

6

我想你可以返回新的屬性組成和所選對象的新對象,如:

var query = from x in db.Courses 
       select new 
       { 
        Course x, 
        NewProperty = true 
       }; 
+2

我真的很想找一種方法將屬性「注入」到當前對象中。但是,謝謝! – 2009-02-25 21:10:56

4

芯吸的回答將是最直接的方法。

如果這對你不起作用(因爲你需要傳遞結果或其他),並假設你正在處理的類已經定義了你想要設置的屬性,你可以創建一個拷貝構造函數或者工廠方法,把你想要設置的現有實例加屬性的值:

var query = from x in db.Courses 
      select new Course(x, valueOfNewProperty); 

另外,如果Course定義屬性,你可以繼承它,並使用相同的方法:

var query = from x in db.Courses 
      select new CourseWithExtraProperty(x, valueOfNewProperty); 

(顯然,爲你的子類選擇一個更好的名字)

雖然,除非你真的需要這樣做,否則堅持eking的解決方案。

1
  • ServiceStack具有built-in wayPopulateWith方法來處理這種情況。

    • 這是code example

      foreach (var item in results) 
      { 
          var test1 = new ItemDto().PopulateWith(item); 
          test1.extraField1 = "extra"; 
          response.Add(test1); 
      }` 
      
  • 如果你不使用ServiceStack,你可以隨時使用AutoMapper

    CreateMap<Foo, Bar>().ForMember(x => x.ExtraBarProperty, opt => opt.Ignore());