LinqToSql:ExecuteQuery是一个ExecuteQuery-result?

时间:2014-11-19 12:16:24

标签: vb.net linq linq-to-sql

我使用此代码从我的数据库中获取所有客户......

Dim customerResult = db.ExecuteQuery(Of VIEW_customers)("SELECT * FROM TOPL_Customers").ToList

既然我已经从数据库中获取了所有客户,那么我想运行一个"过滤器"查询customerResult - 我该怎么做?

希望有这样的事情......

Dim filterResult = customerResult.ExecuteQuery(Of VIEW_customers)("SELECT * WHERE active=1").ToList

有什么建议吗?我不想两次查询数据库。

我需要使用字符串作为搜索查询,因为它是动态的。

由于

2 个答案:

答案 0 :(得分:0)

试试这个:

var filteredResult = from a in customerResult
                     //Add suitable filter condition based on column values
                     where a.Active == 1
                     select a;

答案 1 :(得分:0)

我在这里假设VIEW_customers代表结果集的模型。

您可以使用Expressions构建一系列过滤器,然后将它们连接在一起,以创建一个动态的where子句来对结果集运行。

Expression<Func<VIEW_customers, bool>> predicate1 = x => x.someField == 'something';
Expression<Func<VIEW_customers, bool>> predicate2 = x => x.otherField == 'something else';

然后,您可以根据需要与.And.Or一起加入:

Expression<Func<VIEW_customers, bool>> combinedPredicate = predicate1.And(predicate2);

您可以将任意数量的这些链接在一起;它是布尔逻辑(基本上将每个附加子句视为由一组括号括起来)。当您准备好使用谓词时,编译它并像普通.Where子句一样运行它。

Func<VIEW_customers, bool> compiledPredicate = combinedPredicate.Compile();
var results = customerResult.Where(compiledPredicate);