2011-04-15 31 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 }); 
相关问题