Доступ к каждому объекту системы можно получить через интерфейс 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.