gpt4 book ai didi

c# - 具有数据库列名称到实际列值的字符串参数

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:17 25 4
gpt4 key购买 nike

我有一个发送字符串参数(paramType)的方法,该参数具有数据库列的名称。我想在我的 Select 语句中获取该列的值。

我需要用该列的值替换 paramType。

var details = DetailsRepository
.Find(application => application.Created > compareDate)
.Select(m => new {m.ApplicationId, paramType })
.Distinct();

我只需要将 paramType 替换为列的名称是 Select。假设我有 paramtype = "Address",我希望第二个元素是 m.Address。

最佳答案

如果paramType 的值是成员名称,那么要做到这一点,您必须在运行。这是可能的,但很尴尬,除非您要选择的所有列始终属于同一类型。由于您要选择的事实,这更加复杂 lambda 中的一个元组。坦率地说,在这种情况下动态编写 SQL 会更容易...


编辑:你可以试试这个,它展示了这里需要的邪恶数量:

static Expression<Func<Application, T>> BuildTupleSelector<T>(
string paramType, Func<T> usedForGenericTypeInference)
{
var m = Expression.Parameter(typeof(Application), "m");
var body = Expression.New(typeof(T).GetConstructors().Single(),
new Expression[] {
Expression.PropertyOrField(m, nameof(Application.ApplicationId)),
Expression.PropertyOrField(m, paramType)
},
new MemberInfo[]
{
typeof(T).GetProperty("ApplicationId").GetGetMethod(),
typeof(T).GetProperty("Value").GetGetMethod()
});
return Expression.Lambda<Func<Application, T>>(body, m);
}

用法:

var details = DetailsRepository
.Find(application => application.Created > compareDate)
.Select(BuildTupleSelector(paramType,
() => new { ApplicationId = 123, Value = "abc" }))
.Distinct();

详细信息现在应该是具有 int ApplicationIdstring Value 的匿名类型。

关于c# - 具有数据库列名称到实际列值的字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714732/

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