gpt4 book ai didi

c# - 我怎样才能让 NHibernate 映射到元组或类?

转载 作者:行者123 更新时间:2023-11-30 15:56:26 25 4
gpt4 key购买 nike

我有以下方法从数据库中获取结果列表。

public static IList<T> Find<T>(DetachedCriteria crit) where T : class
{
lock (_locker)
{
return crit.GetExecutableCriteria(InstanceSession)
.List<T>();
}
}

这通常效果很好。但是,我更改了一个调用上述方法的方法。

public IList<FooBarResult> FindResults(FooBarTask st)
{
return DataAccess.Find<FooBarResult>(DetachedCriteria.For<FooBarResult>()
.Add(Restrictions.Eq("Task", st))).ToList();
}

这有效(因为我不想返回整个 FooBarResult,只返回其中的某些列)。

public IList<Tuple<DateTime, Guid>> FindResults(FooBarTask st)
{
return DataAccess.Find<Tuple<DateTime, Guid>>(DetachedCriteria.For<FooBarResult>()
.Add(Restrictions.Eq("Task", st))
.SetProjection(
Projections.ProjectionList()
.Add(
Projections.Property("FieldOne")
)
.Add(
Projections.Property("FieldTwo")
)
)
)
.ToList();
}

我希望顶部的 Find 方法会自动将列表的条目转换为 Tuple,但它只返回 System.Object[]

有什么方法可以让它返回一个元组列表吗?

最佳答案

您可以按照 this answer 中的说明尝试使用 SetResultTransformer :

var tupleConstructor = typeof(Tuple<DateTime, Guid>).GetConstructors()[0];

然后:

 return DataAccess.Find<Tuple<DateTime, Guid>>(DetachedCriteria.For<FooBarResult>()
.Add(Restrictions.Eq("Task", st))
.SetProjection(
Projections.ProjectionList()
.Add(
Projections.Property("FieldOne")
)
.Add(
Projections.Property("FieldTwo")
)
).SetResultTransformer(Transformers.AliasToBeanConstructor(tupleConstructor))
).ToList();

关于c# - 我怎样才能让 NHibernate 映射到元组或类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46847106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com