2011-03-30 33 views
1

我需要使用對象列表中的一個或兩個屬性將字符串列表聚合在一起,但取決於一點邏輯。列表中的每個項目應該是連接在一起的屬性1和屬性2的字符串值,用連字符分隔。 UNLESS屬性1具有與屬性2相同的字符串值,在這種情況下,該項目將僅屬於屬性1.只是爲了闡明,所有對象都是相同的類型,並且這兩個屬性都是字符串值。從一些屬性和一點邏輯混合一個列表

下面是一個例子來說明吧,以防萬一我沒有任何意義..

Object 1: Prop 1 = "Object 1", Prop 2 = "Object 1" // Same value 
Object 2: Prop 1 = "Object 2", Prop 2 = "Obj 2" // Different 

結果列表=

[0] = "Object 1", 
[1] = "Object 2-Obj 2" 

是否有這樣做的一個「純」的方式使用一點Linq或什麼東西,而不是手動循環?

回答

4

這樣的事情?

var result = allItems.Select(
    item=> 
    item.Prop1==item.Prop2 
     ? item.Prop1 
     : String.Format("{0}-{1}", 
      item.Prop1, item.Prop2) 
); 
+0

沒錯,就是這樣!事實上,看起來很直截了當地看着你的答案,我認爲由於某種原因它會複雜得多。謝謝! – w69rdy 2011-03-30 14:34:32

+0

我要upvote,但我會等你來修復錯別字:P(不應該'item.Prop1 == Prop2'爲'item.Prop1 == item.Prop2'?)。另外,我想知道'ToString()'是否有任何用途:這個問題已經提到過,這兩個屬性都是字符串。而且,爲了防止任何人想要它,下面是語法加糖的版本(在空閒時添加空格):'result = from all item in item all item.Prop1 == item.Prop2? item.Prop1:String.Format(「{0} - {1}」,item.Prop1,item.Prop2)' – 2011-03-30 14:53:23

+0

@ w69rdy:如果答案解決了您的問題,請務必在左側標記「剔號」保證金將答案標記爲「已接受」,因此回答者可以獲得信用,其他人會將問題視爲已回答。 – 2011-03-30 14:56:17