我写这个方法:
public List<TResult2> SelectAndJoin<TOuter, TInner, TKey, TResult, TResult2>(IEnumerable<TInner> inner,
System.Linq.Expressions.Expression<Func<Regions, TKey>> outerKeySelector,
System.Linq.Expressions.Expression<Func<TInner, TKey>> innerKeySelector,
System.Linq.Expressions.Expression<Func<Regions, TInner, TResult>> resultSelector,
Func<Regions, TResult2> selector)
{
using (RepositoryDataContext = new DataClasses1DataContext())
{
return RepositoryDataContext.Regions.Join(inner, outerKeySelector, innerKeySelector, resultSelector).AsEnumerable<TResult2>().Select<Regions, TResult2>(selector).ToList<TResult2>();
}
}
但是表达式follow return有这个错误:
'System.Linq.IQueryable'不包含'AsEnumerable'的定义,并且最好的扩展方法重载'System.Linq.Enumerable.AsEnumerable(System.Collections.Generic.IEnumerable)'有一些无效的参数
我如何摆脱这个错误?
是这个代码标准吗?
感谢
答案 0 :(得分:2)
您在枚举上调用AsEnumerable<TResult2>
,其类型为IQueryable<TResult>
。您应该致电AsEnumerable<TResult>
,或者您甚至可以省略通用参数并致电AsEnumerable()
此外,您的下一个选择也不会出于同样的原因 - 您为泛型提供了错误的类型。
答案 1 :(得分:0)
我可能会忽略这一点......但是:
IQueryable
继承自IEnumerable
,因此我认为此代码中不需要AsEnumerable()
。
如果您确实需要/想要在执行Select
之前执行查询,那么您可以使用ToList()
代替AsEnumerable()
- 这会更清楚
我也想知道您是否在{。1}}中添加了using System.Linq
- 因为AsEnumerable()
是System.Linq