C#NHibernate问题 - 我试图返回不同的值。
这是我到目前为止所做的:
IList<TaskFor> objsResult = session.CreateCriteria(typeof(TaskFor)).setProjection(Projections.Distinct).List<TaskFor>();
return objsResult;
我正在尝试返回一组值,但我需要删除重复项。 我似乎无法让设置的预测适用于此实例。
期待听到任何答案。
谢谢,
果渣
答案 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的行为。