gpt4 book ai didi

c# - 在 NHibernate 中动态更改查询类型

转载 作者:行者123 更新时间:2023-11-30 23:01:42 25 4
gpt4 key购买 nike

我想实现 NHibernate 根据条件查询不同类型。假设条件为 false 那么查询应该如下所示:

var myVar = session.Query<TypeWhenFalse>()
.Where(a => condition)

当条件为真时,它应该是这样的:

var myVar = session.Query<TypeWhenTrue>()
.Where(a => condition)

请注意不同的查询类型 TypeWhenFalseTypeWhenTrue。由于重复代码,我不想使用 if 子句来设置不同的类型。

有没有办法动态地执行此操作以避免 if 子句?在互联网上找不到任何有用的信息。

提前致谢:-)

最佳答案

你必须使用通用类型方法,你可以使用扩展来实现你想要的。

但是..为了让它有意义,您需要让两种返回类型都具有由接口(interface)实现的通用结构。

看这个例子:

public static void Main()
{
var abc = new List<long>(){ 1,2,3,4};
var result = abc.AsQueryable().ConvertExtension();
}

public static IQueryable ConvertExtension<T>(this IQueryable<T> source, bool condition=false)
{
return condition
? (IQueryable) source.Select(x => x.ToString()).AsQueryable<string>()
: source.Select(x => int.Parse(x.ToString())).AsQueryable<int>();
}

关于通用类型的更多信息:C# generic types有关接口(interface)的更多信息:Interfaces

如果您为这两种类型都实现了一个接口(interface),您可以键入生成的 Iqueryable 作为接口(interface)。该方法将是 IQueryable ConvertExtension

并且您将能够像它一样操作这两种类型。

关于c# - 在 NHibernate 中动态更改查询类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50905027/

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