Присвоение запроса Linq типу объекта - PullRequest
1 голос
/ 24 декабря 2010

Я учу Linq to Sql;

Всегда ли так, что вы просто передаете запрос напрямую как присваивание типу бизнес-объекта, как это сделано здесь, в «строке возврата»? Каковы ограничения этого? Каковы требования; Что имя свойства должно совпадать с именем столбца базы данных?

Что если:

  1. Бизнес-объект имеет другие свойства в дополнение к тем, которые сохранены в базе данных
  2. В бизнес-объекте отсутствует одно свойство, совпадающее с именем столбца?

Будет полезна любая другая важная информация об ограничениях и вещах, на которые следует обратить внимание.

Пример:

public List<Beer> GetAllBeers()
{
    DataClassesDataContext db = new DataClassesDataContext();
    var beers = from b in db.Beers
                orderby b.BeerName
                select b;
    return beers.ToList<Beer>();
}

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Когда вы создали свой dbml-файл и перетащили таблицу Beer на холст, дизайнер создает для вас класс с именем Beer. По умолчанию этот класс отображает 1-1 в таблицу - свойство для каждого столбца, одинаковые типы данных и т. Д.

Вы можете изменить эти свойства, если хотите - вы можете изменить их имя и тип данных, вы можете удалить их (они должны быть обнуляемыми в базе данных, если вы их удалите), вы можете добавить свойства, которые не обязательно сопоставление с базой данных и т. д.

Когда вы создаете объект контекста данных, вы можете извлечь эти Beer объекты (класс, а не таблицу) из базы данных, используя db.Beers. LINQ-to-SQL заполняет эти объекты в соответствии с правилами, изложенными в конструкторе, т. Е. Какой столбец соответствует какому свойству, типам данных и т. Д. Любое свойство в классе, которое не отображается в столбце, получит значение по умолчанию, как обычный инициализированный объект.

Вы можете использовать эти объекты так же, как и любой другой объект; это просто классы с дополнительными атрибутами. Вы можете увидеть их в файле MyDatabase.designer.cs, который находится за файлом dbml. Поместите их в список и верните их, спроектируйте их в другие объекты, выберите только их свойства id - все, что вам нужно сделать.

1 голос
/ 24 декабря 2010

Нет, это не всегда так ... однако очень часто, когда вы настраиваете свое приложение для linq to sql, вы в конечном итоге получаете отображение своего домена и моделей данных.

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

DataClassesDataContext db = new DataClassesDataContext();
var suppliers = from b in db.Beers
                orderby b.BeerName
                select b.Supplier;

Это вернет IEnumerable<string> только свойства поставщика.

Или использование анонимного классаили даже ваш собственный класс, который вы можете проецировать на это ...

var suppliers = from b in db.Beers
                orderby b.BeerName
                select new ()
                {
                  Supplier = b.Supplier,
                  BeerName = b.BeerName
                };

или ваш собственный класс ...

var suppliers = from b in db.Beers
                orderby b.BeerName
                select new MyClass()
                {
                  Supplier = b.Supplier,
                  BeerName = b.BeerName
                };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...