想象一下下面的表结构
---------
TableA
ID
Name
---------
TableB
ID
TableAID
---------
TableC
ID
TableBID
我想定义一个连接这三个表并接受 aExpression<Func<TableA, TableB, TableC, T>>
作为选择器的函数。
所以我想要以下内容:
public IQueryable<T> GetJoinedView<T>(Expression<Func<TableA, TableB, TableC, T>> selector)
{
return from a in DbContext.Set<TableA>()
join b on DbContext.Set<TableB>() a.ID equals b.TableAID
join c on DbContext.Set<TableC>() b.ID equals c.TableBID
select selector;
}
现在,显然上面没有做我想做的事,这会给我一个IQueryable
表达式类型。我可以使用方法链语法,但最终我需要多个选择器,每个方法链调用一个。有没有办法获取选择器并将其应用于匿名类型,如下面的不完整函数:
public IQueryable<T> GetJoinedView<T>(Expression<Func<TableA, TableB, TableC, T>> selector)
{
var query = from a in DbContext.Set<TableA>()
join b on DbContext.Set<TableB>() a.ID equals b.TableAID
join c on DbContext.Set<TableC>() b.ID equals c.TableBID
select new
{
A = a, B = b, C = c
};
// I need the input selector to be modified to be able to operate on
// the above anonymous type
var resultSelector = ModifyInputSelectorToOperatorOnAnonymousType(selector);
return query.Select(resultSelector);
}
关于如何做到这一点的任何想法?