Linq:将值复制到另一个

时间:2011-04-15 09:31:45

标签: c# linq linq-to-objects

我有这个对象的集合:

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();

我想依赖res结果将FR的所有值复制到Value,如果res为false,则从NL复制到Value:

我试试这个:

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

??????代表我找不到的代码:(

有什么想法吗?

谢谢,

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;

    }

什么是返回类型?

2 个答案:

答案 0 :(得分:5)

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}); 

如果希望结果可以从方法返回,则必须使用带有select语句的类,而不是创建匿名类型:

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

其中MyObject具有定义为Id和Value的属性。然后你可以将其作为

返回
IEnumerable<MyObject >.

答案 1 :(得分:4)

使用三元运算符

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