У меня возникла небольшая проблема с частичной проекцией.
У меня есть метод в наших списках, чтобы мы могли легко загружать в них объекты, однако загрузка полных объектов, конечно, не вариант.Это означает, что я должен сделать некоторую проекцию, я сделал это здесь, где вы можете выбрать, какое свойство иметь в качестве DisplayValue.
Использование кода выглядит следующим образом:
dropCompany.LoadEntityList(Customer.Company, x => x.CompanyName, x => x.IsCompany);
Частьреализация выглядит следующим образом:
public void LoadEntityList<T>(T selectedEntity,
System.Linq.Expressions.Expression<Func<T, string>> selector,
System.Linq.Expressions.Expression<Func<T,bool>> where = null)
where T : FlexyBook.Infrastructure.Entity
{
var wCollection = new ObjectWrapperCollection<object>();
IQueryable<T> query = FlexyBook.Repository.DomainService<T>.GetDomainService().GetAll();
if (where != null)
query = query.Where(where);
foreach (var item in query.Select(x =>
new ObjectWrapper<object>()
{
Value = x.ID,
Text = selector.Compile()(x)
})
.ToList().OrderBy(x => x.Text))
{
wCollection.List.Add(item);
}
}
Проблема в том, что это приводит к тому, что полная сущность загружается из базы данных, а затем проецируется.Проблема также очень очевидна, именно эта строка «selector.Compile () (x)».
Моя проблема в том, что я понятия не имею, как разрешить этому частичному выбору перейти в NHibernate как проекцию.Очевидно, мне нужен селектор идентификаторов для идентификации сущностей, и я не хочу менять способ вызова метода.
Есть ли способ решить эту проблему?