我試圖創建一個自定義的LINQ到用逗號分隔的字符串,將其轉換爲一個數組實體擴展方法,然後使用IEnumerable<string>.Contains
產生相當於的SQL IN子句。自定義擴展方法中的LINQ EF相當於SQL「IN」的條款
很容易,當你總是知道表/實體及其列/要將此過濾器應用於屬性。我們面臨的挑戰是,我希望能夠利用這個擴展方法上的任何實體或財產。
這是多遠我來:
public static IQueryable<TSource> CustomInClause<TSource>(this IQueryable<TSource> myQuery, Expression<Func<TSource, string>> colExpression, string filterCriteria)
{
string[] myArray = filterCriteria.Split(",", StringSplitOptions.RemoveEmptyEntries);
//Various other operations here..............
if (myArray.Length > 0)
{
myQuery = myQuery.Where(b => myArray.Contains(colExpression));
}
return myQuery;
}
正如你所看到的,我試圖用colExpression作爲一個動態的表達,這將是x => x.SomeColumn
相當於其中SomeColumn可以是任意的字符串/ VARCHAR柱。
然後,我會實現這個擴展是這樣的:
var q = context.SomeTable.CustomInClause(f => f.SomeColumn, someString);
var q2 = context.OtherTable.CustomInCluse(f => f.OtherColumn, otherString);
現在我得到這個錯誤:
'string[]' does not contain a definition for 'Contains' and the best extension method overload 'ParallelEnumerable.Contains>>(ParallelQuery>>, Expression>)' requires a receiver of type 'ParallelQuery>>'
我不太知道如何在這種情況下使用並行查詢,或者如果有另一種解決方案。有任何想法嗎?
是!這工作完美。 –