如何在此 Entity Framework IQueryable 查询中抽象出 select?
How do I abstract out the select in this Entity Framework IQueryable query?
我有以下 Entity Framework 个查询:
var items1 = items.Select(x=> x.Prop1)
.Select(...).OrderBy(..).ToArray();
var items2 = items.Select(x=> x.Prop2)
.Select(...).OrderBy(..).ToArray();
var items3 = items.Select(x=> x.Prop3)
.Select(...).OrderBy(..).ToArray();
如您所见,这是重复的代码。
下面的.Select(...).OrderBy(..).ToArray();
完全一样
我似乎找不到提取第一个的方法select
有点像,
var temp = Select(x=> x.Prop1);
我想最终使用反射将它变成一个 for 循环,但是上面的语句给了我一个编译错误。
该应用程序是在 .Net 4 上运行的,所以我无法访问任何可能用于解决此问题的新功能。
只需将其移动到另一个函数即可:
ResultType[] Execute(IQueryable<TypeOfProps> query) {
return query.Select(...).OrderBy(..).ToArray()
}
如果您不想创建单独的函数 - 创建匿名函数:
Func<IQueryable<TypeOfProps>,ResultType[]>> execute = (query) =>
query.Select(...).OrderBy(..).ToArray();
var items1 = execute(items.Select(x=> x.Prop1));
var items2 = execute(items.Select(x=> x.Prop2));
var items3 = execute(items.Select(x=> x.Prop3))
您可以定义一个方法,给定第一个 Select
s lambda,计算结果:
ResultType[] YouCarefullyChoosenName(Expression<Func<InputType, string>> propSelector)
{
return items.Select(propSelector).Select(...).OrderBy(..).ToArray();
}
var items1 = YouCarefullyChoosenName(x => x.Prop1);
var items2 = YouCarefullyChoosenName(x => x.Prop2);
var items3 = YouCarefullyChoosenName(x => x.Prop3);
我有以下 Entity Framework 个查询:
var items1 = items.Select(x=> x.Prop1)
.Select(...).OrderBy(..).ToArray();
var items2 = items.Select(x=> x.Prop2)
.Select(...).OrderBy(..).ToArray();
var items3 = items.Select(x=> x.Prop3)
.Select(...).OrderBy(..).ToArray();
如您所见,这是重复的代码。
下面的.Select(...).OrderBy(..).ToArray();
完全一样
我似乎找不到提取第一个的方法select
有点像,
var temp = Select(x=> x.Prop1);
我想最终使用反射将它变成一个 for 循环,但是上面的语句给了我一个编译错误。
该应用程序是在 .Net 4 上运行的,所以我无法访问任何可能用于解决此问题的新功能。
只需将其移动到另一个函数即可:
ResultType[] Execute(IQueryable<TypeOfProps> query) {
return query.Select(...).OrderBy(..).ToArray()
}
如果您不想创建单独的函数 - 创建匿名函数:
Func<IQueryable<TypeOfProps>,ResultType[]>> execute = (query) =>
query.Select(...).OrderBy(..).ToArray();
var items1 = execute(items.Select(x=> x.Prop1));
var items2 = execute(items.Select(x=> x.Prop2));
var items3 = execute(items.Select(x=> x.Prop3))
您可以定义一个方法,给定第一个 Select
s lambda,计算结果:
ResultType[] YouCarefullyChoosenName(Expression<Func<InputType, string>> propSelector)
{
return items.Select(propSelector).Select(...).OrderBy(..).ToArray();
}
var items1 = YouCarefullyChoosenName(x => x.Prop1);
var items2 = YouCarefullyChoosenName(x => x.Prop2);
var items3 = YouCarefullyChoosenName(x => x.Prop3);