Передача LINQ var в базовый метод add C # - PullRequest
1 голос
/ 13 июня 2011

Я создаю слой DAL для своей веб-страницы и впервые использую LINQ.

В настоящее время у меня есть класс с именем CargoTypeCollection, который выполняет запрос типа:

   AHDBDataContext db = new AHDBDataContext();

   var CargoTypes = from cargoTypes in db.cargoTypes
                         select cargoTypes;

Теперь я хочу передать переменную CargoTypes моему базовому классу добавления (от которого наследует только CargoTypeCollections)

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

protected void baseAdd(var CargoTypes)
{
   foreach (var cargo in CargoTypes)
     {
       CargoTypeEntity cargo = new CargoTypeEntity();
       cargo.CargoTypeID = cargo.CargoTypeId;
       cargo.CargoName = cargo.CargoName;
       CargoTypes.Add(Cargo)
      }
}

(не обращайте внимания на несколько опечаток, которые я не вырезал и не вставлял)

Но, очевидно, это не работает, поскольку я не могу использовать var в сигнатуре метода.

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

Вы можете попробовать использовать универсальный репозиторий . Generics решит проблему, в которой вы хотите повторно использовать одну и ту же логику для нескольких типов. Репозиторий , с другой стороны, является хорошим способом обеспечить дополнительное извлечение вашего DAL.Комбинируя дженерики с репозиторием, вы получаете DAL, который можно многократно использовать для нескольких типов, без необходимости писать схожий код для каждого типа.Поэтому я бы посоветовал вам поискать несколько справочных статей, чтобы начать.Например, вы можете прочитать эту статью, чтобы понять, как выглядит универсальный репозиторий .

1 голос
/ 13 июня 2011

Попробуйте:

protected void baseAdd(IQueryable<CargoType> cargoTypes)

Приведенный ниже код установит CargoTypes в IQueryable<T>, где T - это тип элементов 'db.cargoTypes'.

var CargoTypes = from cargoTypes in db.cargoTypes
                 select cargoTypes;
0 голосов
/ 13 июня 2011

Вы можете использовать динамический, например,

protected void baseAdd(dynamic CargoTypes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...