假设我有以下两个要重构的 Linq-To-SQL 查询:
var someValue1 = 0;
var someValue2= 0;
var query1 = db.TableAs.Where( a => a.TableBs.Count() > someValue1 )
.Take( 10 );
var query2 = db.TableAs.Where( a => a.TableBs.First().item1 == someValue2)
.Take( 10 );
请注意,只有Where 参数发生变化。有什么方法可以将查询放入方法中并将Where 参数作为参数传递吗?
所有解决方案都发布在上一个问题 https://stackoverflow.com/questions/863169/how-to-refactor-multiple-similar-linq-queries当我尝试枚举结果时,已在运行时尝试并失败。
抛出的异常是:“查询运算符‘Where’使用的重载不受支持”
绝对地。你会写:
public IQueryable<A> First10(Expression<Func<A,bool>> predicate)
{
return db.TableAs.Where(predicate).Take(10);
}
(这是假设TableA
is IQueryable<A>
.)
调用它:
var someValue1 = 0;
var someValue2= 0;
var query1 = First10(a => a.TableBs.Count() > someValue1);
var query2 = First10(a => a.TableBs.First().item1 == someValue2);
I believe那可行...
这个和你之前问题的答案之间的区别基本上是这个方法需要Expression<Func<T,bool>>
而不是仅仅Func<T,bool>
所以它最终使用Queryable.Where
代替Enumerable.Where
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)