c# - NHibernate Linq Select Projection - 使用部分选择检索完整实体

标签 c# linq nhibernate linq-to-nhibernate

我遇到了部分投影的小问题。

我在我们的列表框上有一个方法,这样我们就可以轻松地将实体加载到其中,但是加载完整实体当然不是一个选项。 这意味着我必须做一些投影,我已经在这里完成了这个,您可以在其中选择将哪个属性作为 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。 我显然需要 ID 选择器来识别实体,我不想更改调用方法的方式。

有没有办法解决这个问题?

最佳答案

执行部分选择的一种方法是将您的选择器表达式更改为以下类型:

System.Linq.Expressions.Expression<Func<T, ObjectWrapper<object>>>

然后你会这样调用它:

dropCompany.LoadEntityList(Customer.Company, x => new ObjectWrapper<object>() { Value = x.ID, Text = x.CompanyName, x => x.IsCompany);

实现:

public void LoadEntityList<T>(T selectedEntity, System.Linq.Expressions.Expression<Func<T, ObjectWrapper<object>>> 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(selector).ToList().OrderBy(x => x.Text))
    {
        wCollection.List.Add(item);
    }
}

关于c# - NHibernate Linq Select Projection - 使用部分选择检索完整实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034774/

相关文章:

c# - 将 onMouseOver javascript 添加到 TextField

c# - 如何在 Windows 应用商店应用程序中将 HTML 颜色名称解析为 SolidColorBrush

c# - 所有值的计数均为零的频率表

NHibernate 使用 Cascade.All 执行删除会导致 N+1 删除

c# - List<int> 需要很长时间才能使用 Nhibernate Criteria 进行实例化

c# - 类数据验证的实现

c# - 基于另一个列表过滤列表 - LINQ

c# - 根据父节点的属性获取子节点

C# NHibernate架构,三层应用

c# - 派生 FixedDocument 的序列化