2011-04-15 32 views
2

我有這個對象的集合:的Linq:值複製到另一個

public Class MyObject() 
{ 
    public int Id { get; set; } 
    public int Code { get; set; } 
    public string NL { get; set; } 
    public string FR { get; set; } 
    public string Value { get; set; } 
} 

我有這個

IList<MyObject> listObject = new List<Object>(); 
bool res = MyMethod(); 

我想這取決於資源的結果複製FR的全部價值以價值與NL到值,如果資源是假的:

我試試這個:

var res = (from p in listObject select new { Id = p.Id, Value = ?????? }); 

?????? reprsent代碼我沒有找到:(

任何想法

感謝,

UPDATE1 我做了一個比較通用的方法:

public void MyTest<T>(IList<T> list) where T : ILookup 
    { 

     bool res = MyMethod(); 
     var result = (from p in list select new { Id = p.Id, Value = res? p.FR : p.NL }); 
     return result; 

    } 

什麼返回類型?

回答

5

A conditional or ternary operator將在這裏幫助。它是如何工作的一個例子是:

var result = booleanExpression ? valueIfTrue : valueIfFalse; 

應用到你的代碼,它會是這個樣子:

var copy = (from p in listObject select new { Id = p.Id, Value = res ? p.FR : p.NL}); 

如果您希望得到的結果是從方法可回收你將不得不使用類,而不是創建匿名類型:

var copy = (from p in listObject select new MyObject { Id = p.Id, Value = res ? p.FR : p.NL}); 

其中MyObject的屬性定義爲Id和Value。你可以然後返回它作爲

IEnumerable<MyObject >. 
+1

這可能是有道理的,但調用集合變量以外的'res'。 – 2011-04-15 09:35:27

+0

@Lasse - 非常有效的點;沒有注意到在原代碼中。 – 2011-04-15 09:40:29

+0

謝謝看到我的更新1。 @Andy如果您將「res」更改爲「result」,則還需要在Linq部分中使用「result」:)。當然,這不是我的代碼中的資源,但「res」(結果)更短 – 2011-04-15 09:58:27

4

使用三元運算符

var result = (from p in listObject select new { Id = p.Id, Value = res ? p.FR : p.NL }); 
相關問題