Поддержка Linq
Класс LinqToLcs
пространства имен ICSSoft.STORMNET.Business.LINQProvider
предназначен для поддержки LINQ запросов к сервисам данных SQLDataService
.
Основные возможности LINQProvider описаны в статье Возможности LinqProvider.
Как использовать LinqProvider
Для работы LINQ-провайдера необходима ссылка на System.Linq
using System.Linq;
А также проектная ссылка на ICSSoft.STORMNET.Business.MSSQLDataService.DLL
.
При подключении пространства имен ICSSoft.STORMNET.Business.LINQProvider
объектам SQLDataService добавляется метод Query со следующими прототипами:
public static IQueryable<T> Query<T>(this SQLDataService ds, string viewName) where T : DataObject
public static IQueryable<T> Query<T>(this SQLDataService ds, View view, IEnumerable<View> resolvingViews = null) where T : DataObject
public static IQueryable<T> Query<T>(this SQLDataService ds) where T : DataObject
Параметры:
Имя | Описание |
---|---|
ds |
Сервис данных, наследник SQLDataService, для выполнения запроса |
view |
Представление, используемое для загрузки объектов |
resolvingViews |
Представление мастеров, содержащие их детейлы, используемые в запросе (если таких нет, то null ) |
В последнем варианте перегрузки представление для загрузки объектов будет формироваться динамически (в него попадут свойства, использующиеся в запросе).
При этом, если представление задается статически, предпочтительнее использовать второй вариант перегрузки, указав представление в виде Тип.Views.ИмяТипа
.
Метод возвращает IQueryable
, которому можно передать запрос с помощью методов-расширений LINQ:
Примеры использования
Получение первого подходящего объекта
using ICSSoft.STORMNET.Business;
using ICSSoft.STORMNET.Business.LINQProvider;
//...
var ds = (SQLDataService)DataServiceProvider.DataService; // Cервис данных.
Кошка cat = ds.Query<Кошка>(Кошка.Views.КошкаE).First(o => o.Кличка.Contains("ош")); // Получение объекта.
Console.WriteLine(cat.Кличка); //Использование.
Получение первого подходящего объекта (с генерацией TOP 1
в тексте запроса при применении FirstOrDefault
и First
)
using ICSSoft.STORMNET.Business;
using ICSSoft.STORMNET.Business.LINQProvider;
//...
var ds = (SQLDataService)DataServiceProvider.DataService; // Cервис данных.
Кошка cat = ds.Query<Кошка>(Кошка.Views.КошкаE).Where(o => o.Кличка.Contains("ош")).Take(1).FirstOrDefault(); // Получение объекта.
Console.WriteLine(cat.Кличка); //Использование.
Получение коллекции объектов
using ICSSoft.STORMNET.Business;
using ICSSoft.STORMNET.Business.LINQProvider;
//...
var ds = (SQLDataService)DataServiceProvider.DataService; // Сервис данных.
IQueryable<Кошка> objs = ds.Query<Кошка>(Кошка.Views.КошкаE);
IQueryable<Кошка> query = from o in objs where o.PrimaryKey == "6211E0DE-3E7A-4A68-866A-AB206A005B1C" select o; // Получить кошек по заданному значению ключа.
List<Кошка> data = query.ToList(); // Вычитать данные в коллекцию.
Console.WriteLine(data[0).Кличка); // Пользуемся полученными данными.
Следующий код эквивалентен предыдущему
var ds = (SQLDataService)DataServiceProvider.DataService; // Сервис данных.
IQueryable<Кошка> objs = ds.Query<Кошка>(Кошка.Views.КошкаE).Where(o => o.PrimaryKey == "6211E0DE-3E7A-4A68-866A-AB206A005B1C"); // Получить кошек по заданному значению ключа.
List<Кошка> data = objs.ToList(); // Вычитать данные в коллекцию.
Console.WriteLine(data[0).Кличка); // Пользуемся полученными данными.