Чтобы строить LINQ выражения для персистентных объектов, технология XPO предоставляет класс XPQuery<T> . Однако этот механизм не позволяет выполнять LINQ-запросы к Xafari Extensions. Для использования Extensions в LINQ- запросах необходимо использовать класс XFQuery.

Для решения этой задачи модуль Xafari.XF содержит следующие классы:

Основные

Дополнительные

Для использования расширений в LINQ-запросах необходимо

1. Зарегистрировать функции преобразования, в наследнике ModuleBase

public override void Setup(ApplicationModulesManager moduleManager)

Например:

new RegisterExtension<Entity1, EntityExtension1>

       (a => a.EntityExtension1(), b => b.Entity1());

new RegisterExtensionConvertor<EntityExtension4, Entity1>(a => a.Entity1());

new RegisterFunction4XPQueryLinq<EntityExtension1, string>

       (a => a.SampleAction());

2. Использовать класс XFQuery вместо XPQuery, например

var result =

 from p in new XFQuery<XEntity1_Ext2_Ext4>(os)

 select new

 {

 FirstItem = p.Ext4Items.FirstOrDefault(),

 p.Ext2().AliasedExts.String1,

 p.Ext2().ParentEntity1.Ext1().Ext1String

 };

var rr = result.ToList();