Доступ к каждому объекту системы можно получить через интерфейс ITableSource (из пространства имен Ultima.Linq):
[Import] private ITableSourse DataContext { get; set; } |
Результатом выполнения LINQ запросов будут коллекции типа IEnumerable<T> (где Т – тип элемента коллекции):
var query = from u in DataContext.GetTable<User>() where u.Name.StartsWith("a") select new User { ID = u.ID, Name = u.Name, Login = u.Login }; |
С помощью LINQ запросов можно также получить коллекцию объектов анонимных классов:
var query = from u in DataContext.GetTable<User>() where u.Name.StartsWith("a") select new { u.ID, UserName = u.Name, u.Login, FullName = u.Name + " " + u.LastName }; |
А также выполнять операции JOIN и применять сложные условия выборки:
var branches = from ver in DataContext.GetTable<VersionTreeLink>() join tag in DataContext.GetTable<VersionTag>() on ver.DescendantID equals tag.VersionID where tag.IsBranch && ver.AncestorID == rootVersionId select tag; |
Выполнять асинхронную загрузку данных:
var result = await DataContext.GetTable<User>().ToListAsync(); |
Также доступны следующие методы асинхронной загрузки данных: SingleAsync(), SingleOrDefaultAsync(), FirstAsync(), FirstOrDefaultAsync(), ToArrayAsync(), ToIDListAsync().
Кроме того, в LINQ запросах можно использовать фильтр, построенный с помощью PredicateBuilder.