2011-11-03 87 views
1

下面的代碼採用C類的集合,並創建由兩個屬性A和B A和B被置於同一集合內的值的集合:選擇多個類屬性

class A 
{ 
    public int x { get; set; } 
} 
class B 
{ 
    public int x { get; set; } 
} 
class C 
{ 
    public A A { get; set; } 
    public B B { get; set; } 
} 

.......... 

var items = new List<C>() 
       { 
        new C() 
         { 
          A = new A() {x = 1}, 
          B = new B() {x = 2} 
         }, 
        new C() 
         { 
          A = new A() {x = 3}, 
          B = new B() {x = 4} 
         }, 
       }; 

var qA = from item in items 
     select (object)item.A; 
var qB = from item in items 
     select (object)item.B; 
var qAll = qA.Concat(qB); 

可以用一個查詢來做到這一點嗎?

+0

是'items'一個IList的''?你爲什麼要把'item.A'和'item.B'加到'object'? – Jason

+0

是的。項目是IList 。我現在更新了代碼。我投A和B來反對,所以我可以把它們放在一個集合中。真正的代碼沒有這樣做,我使用A和B繼承的接口,但它並不重要。問題中的代碼只是爲了展示這個想法。 – Max

回答

2

如果你真的想扁平化這樣的特性,你可以喂陣列SelectMany()

var qAll = items.SelectMany(item => new object[] { item.A, item.B }); 
1

你可以使用foreach:

var qAll = new List<object>(); 
items.ForEach(item => { qAll.Add(item.A); qAll.Add(item.B) }); 
+0

@ Mr.Disappointment,我想。對不起,失望了。試圖完成一個查詢請求。 – Joe

+0

@ Mr.Disappointment,是的,我有一個錯字 – Joe