如何在 Linq To Sql 查询中重用 where 子句

How to reuse where clauses in Linq To Sql queries(如何在 Linq To Sql 查询中重用 where 子句)

本文介绍了如何在 Linq To Sql 查询中重用 where 子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有用户搜索记录类型的记录.他们在文本框中键入搜索词,然后我通过将多个字段与搜索词匹配来搜索记录.

I have users searching records of type Record. They type a search term in a textbox and then I search records by matching several fields with the search term.

我的查询看起来像:

var results = from record in DataContext.Records
              where
                   record.Field1.ToLower().Contains(term) ||
                   record.Field2.ToLower().Contains(term) ||
                   record.Field3.ToLower().Contains(term)
              select record;

我有许多查询都使用相同的过滤器,因此我想提取过滤器以便可以重复使用.类似的东西:

I have a number of queries that all use the same filter and thus I would like to extract the filtering so it can be reused. Something like:

var filter = new Func<Record, string, bool>(
                (record, term) =>
                    record.Field1.ToLower().Contains(term) ||
                    record.Field2.ToLower().Contains(term) ||
                    record.Field3.ToLower().Contains(term)
             );

var results = from record in DataContext.Records
              where filter(record, term)
              select record;

然而,它不起作用,因为:

However, it does not work because:

方法System.Object DynamicInvoke(System.Object[])"不支持转换为 SQL.

如何在查询中重复使用我的 where 条件?

How can I reuse my where condition across queries?

推荐答案

使用 编译查询!

var filter = CompiledQuery.Compile(
    (DatabaseDataContext dc, Record record, string term) =>
        record.Field1.ToLower().Contains(term) ||
        record.Field2.ToLower().Contains(term) ||
        record.Field3.ToLower().Contains(term)
);

var results = from record in DataContext.Records
              where filter(DataContext, record, term)
              select record;

有关详细信息,请参阅如何:存储和重用查询.

For more information, see How to: Store and Reuse Queries.

这篇关于如何在 Linq To Sql 查询中重用 where 子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何在 Linq To Sql 查询中重用 where 子句

基础教程推荐