C#NHibernate问题 - 我试图返回不同的值

时间:2011-02-06 13:02:22

标签: c# sql nhibernate

C#NHibernate问题 - 我试图返回不同的值。

这是我到目前为止所做的:

IList<TaskFor> objsResult = session.CreateCriteria(typeof(TaskFor)).setProjection(Projections.Distinct).List<TaskFor>();

return objsResult;

我正在尝试返回一组值,但我需要删除重复项。 我似乎无法让设置的预测适用于此实例。

期待听到任何答案。

谢谢,

果渣

1 个答案:

答案 0 :(得分:4)

我会说Aidan Boyle的this回答对你很有帮助。

  

要执行不同的查询,您可以将标准上的投影设置为Projections.Distinct。然后,您可以包含要返回的列。然后通过将结果转换器设置为AliasToBeanResultTransformer,将结果转回强类型对象 - 传入应转换为结果的类型。在此示例中,我使用与实体本身相同的类型,但您可以专门为此查询创建另一个类。

ICriteria criteria = session.CreateCriteria(typeof(Person));
criteria.SetProjection(
    Projections.Distinct(Projections.ProjectionList()
        .Add(Projections.Alias(Projections.Property("FirstName"), "FirstName"))
        .Add(Projections.Alias(Projections.Property("LastName"), "LastName"))));

criteria.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person)));

IList people = criteria.List();
  

这会创建类似于(至少在SQL Server中)的SQL:

SELECT DISTINCT FirstName, LastName from Person
  

请注意,只会在结果中填充您在投影中指定的属性。

     

此方法的优点是过滤在数据库中执行,而不是将所有结果返回给您的应用程序,然后进行过滤 - 这是DistinctRootEntityTransformer的行为。