Linq: скопировать значение в другое - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть коллекция этого объекта:

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 и из NL в Value, если res равен false:

Я пытаюсь это:

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 ]

5 голосов
/ 15 апреля 2011

A условный или троичный оператор поможет здесь. Пример того, как это работает:

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 >.
4 голосов
/ 15 апреля 2011

Используйте троичный оператор

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