是否可以在Linq to SQL中使用自动过滤器?

问题描述:

我正在研究客户决定使用记录状态的系统。其中之一是排除在外的X.我想知道的是,如果有可能运行linq查询,增加类似是否可以在Linq to SQL中使用自动过滤器?

where status != 'X' 

自动不显示“排除”记录。谢谢 !

排序Linq中的查询是懒惰评估的,因此您可以在实际获取第一个结果之前向它们添加条件,并且仍会导致使用“最佳”SQL。

例如:

// an extension method on the LINQ context: 
public static IQueryable<Story> FilteredStories(this DbContext db) 
{ 
    return from story in db.Stories where status != "X" select story; 
} 

// ...later... 
var stories = from story in db.FilteredStories() 
       where title = "Something" 
       select story; 
foreach(var story in stories) 
{ 
    // whatever... 
} 

你也可以“隐藏”的基本LINQ上下文和总是通过追加status != "X"条件的包装类。当然,那么问题是,那么你不得不跳过如果你没有想要一个过滤列表...

+0

你可能想要在扩展方法上使用公共静态 – 2010-09-21 00:48:04

+0

@Matt:对,谢谢。 – 2010-09-21 02:17:22

你可能会在之后是Dynamic LINQ。这是一个帮助程序库,可以用来从字符串中分析LINQ表达式。

+0

我不明白这是如何相关的,这是非常简单的使用Where操作符。 – 2010-09-21 00:49:55

+0

我认为这个问题更多的是要求如何使用LINQ where子句,错误地认为:)。如果OP的客户想要开始定义更多规则,包括以A,B或C等开头,那么动态LINQ将变得有用。 – sipwiz 2010-09-21 01:13:17

LINQ是如此容易,写的问题实际上给你的答案!

where status != "X" 

我更倾向于将

.Where(record => record.status != "X") 

这不完全是一回事。你错过的唯一的东西是双引号,因为它是一个字符串,而不是字符。