我已经定义了一个如下所示的选择器表达式:
private Expression<Func<myTable, MyCustomModel>> selectorExpression = m => new MyCustomModel
{
ID = m.id,
Name = m.name,
Score = 10
}
我这样使用它:
IQueryable<DebtorModel> query = (from myTable in context.myTables
where myTable.id == 4
select myTable).Select(selectorExpression);
我想要做的是将得分作为参数传递,所以我做了这样的事情:
private Expression<Func<myTable, int, MyCustomModel>> selectorExpressionV2 = (m, score) => new MyCustomModel
{
ID = m.id,
Name = m.name,
Score = score
}
我可以将selectorExpressionV2应用于上面的查询吗?我试过这个:
IQueryable<DebtorModel> query = (from myTable in context.myTables
where myTable.id == 4
select new {myTable, score = 10}).Select(selectorExpressionV2);
但它没有用。我得到一个错误,比如 方法的类型参数不能从用法尝试指定类型参数...
推断出来我没有意识到我应该怎么写这个......或者如果可能的话:):
答案 0 :(得分:1)
执行此操作时:
select new {myTable, score = 10}
您创建了一个匿名类型,因此,selectorExpression应为Expression<Func<MyAnnonymousType, MyCustomModel>>
,但您不能这样做,因为它是一个匿名类型。
你应该创建一个新类来保存myClass和得分的值,就像Ben Robinson在他的评论中所说的那样,或者如果得分是整个linq语句中的常量,你可以这样做:
private Expression<Func<MyClass, MyCustomModel>> GetSelectorExpression(int score) {
return m => new MyCustomModel
{
ID = m.id,
Name = m.name,
Score = score
}
}
然后使用它时:
var selectorExpression = GetSelectorExpression(10);
IQueryable<DebtorModel> query = (from myTable in context.myTables
where myTable.id == 4
select new myTable).Select(selectorExpression);