Создайте список одного типа объекта из списка другого использования Linq

Используйте здравый смысл действительно. Если у Вас есть что-то как:

public class ScreenCoord2D{
    public int x;
    public int y;
}

Тогда существует мало точки в оборачивании их в методах get и методах set. Вы никогда не собираетесь хранить x, y координата в целых пикселях любой другой путь. Методы get и методы set только замедлят Вас.

, С другой стороны, с:

public class BankAccount{
    public int balance;
}

Вы могли бы хотеть изменить способ, которым баланс вычисляется в какой-то момент в будущем. Это должно действительно использовать методов get и методы set.

всегда предпочтительно знать , почему Вы применяете хорошую практику, так, чтобы Вы знали, когда нормально изгибать правила.

20
задан Jeremy 9 November 2009 в 00:34
поделиться

3 ответа

List<B> listB = listA.Select(a => new B()
   {
        Count = a.TotalCount,
        Title = a.Title
   }).ToList();

Действует так же, как решение eduncan, но с другим синтаксисом. Выбирайте ..

34
ответ дан 29 November 2019 в 23:33
поделиться
var list = 
  from a in TableA
  select new B {
    Count = a.TotalCount,
    Title = a.Title
  };

Вы создаете новый экземпляр B в предложении select и назначаете свойства с помощью встроенной функции назначения свойств в C # 3.0.

Преимущества встроенного отображения возникают из-за отложенного выполнения вашего оператора Linq. Linq отобразит измененный оператор и выполнит его из вашего IQueryable. Например:

public class ClassA 
{
  public int TotalCount;    
  public string Title;
}

public class ClassB
{
  public int Count;
  public string Title;
}

public IQueryable<ClassB> FetchAllOfClassB()
{
  var list = 
    from a in TableOfClassA
    select new ClassB {
      Count = a.TotalCount,
      Title = a.Title
    };

  return list.AsQueryable();
}

Технически AsQueryable () является немного избыточным. Иногда я использую это, чтобы подчеркнуть, другие говорят, что это абсолютно необходимо. Тем не менее, сам объект списка - это IQueryable класса B.

Затем вы можете вызвать FetchAllOfClassB () дальше по цепочке и использовать IQuerable. Это довольно удобно и эффективно.

11
ответ дан 29 November 2019 в 23:33
поделиться

Хм, из моей головы (так что, вероятно, будут ошибки!):

List = from a в listOfA выберите новый B (a.count, a. title);

может помочь.

0
ответ дан 29 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: