gpt4 book ai didi

c# - Entity Framework 通用

转载 作者:太空狗 更新时间:2023-10-29 22:23:47 26 4
gpt4 key购买 nike

我有如下代码:

switch(sort.Column)
{
case "code":
model = (sort.Direction == SortDirection.Ascending)
? model.OrderBy(x => x.code)
: model.OrderByDescending(x => x.code);
break;
case "name":
model = (sort.Direction == SortDirection.Ascending)
? model.OrderBy(x => x.name)
: model.OrderByDescending(x => x.name);
break;
..............
}

我有大约 10-15 个字段(如“代码”和“名称”),我不想复制和粘贴只有一个区别的相似代码 - 字段名称。

有没有方法以某种方式概括查询?

最佳答案

您可以使用反射(这假设 codename 是属性;如果它们是公共(public)变量,您将不得不相应地修改):

model = (sort.Direction == SortDirection.Ascending)
? model.OrderBy( x => x.GetType()
.GetProperty( sort.Column ).GetValue( x, null ) ) :
: model.OrderByDescending( x => x.GetType()
.GetProperty( sort.Column ).GetValue( x, null ) );

正如 Dunc 在下面的评论中指出的那样,这种方法在枚举的每一步都强制进行反射,而随着操作的进行,反射的代价很高。如果您的集合是同类的,则可以通过将反射移出枚举来获得更好的性能。如果您的模型包含类型为Foo的元素,您可以改为执行以下操作:

var prop = typeof( Foo ).GetProperty( sort.Column );

model = (sort.Direction == SortDirection.Ascending)
? model.OrderBy( x => prop.GetValue( x, null ) ) :
: model.OrderByDescending( x => prop.GetValue( x, null ) );

请注意,如果您的集合不是同类的,这将抛出 TargetException

关于c# - Entity Framework 通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9950830/

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