我试图总结一些重复的代码扩展方法,清理了一点东西。LINQ表达式与LINQ到实体
我试图避免被检查,如果一个字符串(通常是一个控件的文本值)为空/空,如果是,它使用比较模式包含在我的数据的字段。显然这个字段并不是硬编码到我的扩展中,对象类型也不是。我得到的LINQ to Objects完美的工作,但我得到了泛型运行时错误“LINQ to Entities不能识别方法'System.String Invoke(GenericQueryHelper.Customer)'方法,并且这种方法不能被翻译成商店表达。“当使用实体框架模型时。
这是我有:
<System.Runtime.CompilerServices.Extension()>
Public Function CompareAndFilter(Of T)(source As System.Linq.IQueryable(Of T), expressionField As System.Linq.Expressions.Expression(Of System.Func(Of T, String)), compareTo As String)
If String.IsNullOrEmpty(compareTo) Then
Return source
Else
Dim compiledField As System.Func(Of T, String) = expressionField.Compile()
Return source.Where(Function(x) compiledField.Invoke(x).Contains(compareTo))
End If
End Function
而且我也试过:
<System.Runtime.CompilerServices.Extension()>
Public Function CompareAndFilter(Of T)(source As System.Linq.IQueryable(Of T), expressionField As System.Func(Of T, String), compareTo As String)
If String.IsNullOrEmpty(compareTo) Then
Return source
Else
Return source.Where(Function(x) expressionField.Invoke(x).Contains(compareTo))
End If
End Function
用相同的结局......
首先,这甚至可能吗?我希望我的用法是这个样子:
Dim results = repository.Customers.CompareAndFilter(Function(c) c.FirstName, searchText)
我需要得到对SQL数据库运行这个真的,因为它是过滤的结果,所以我不想那样做在内存中。任何任何想法?
+1。聪明的想法。 – StriplingWarrior 2012-02-28 21:50:02
尽管如此,在一百万年内!作品魅力,不错! – RichardW1001 2012-02-28 22:22:40