问题陈述修改LINQ查询
说我有一个查询,其搜索的人的名字:
var result = (from person in container.people select person)
.Where(p => p.Name.Contains(some_criterion)
这将转换到包含像子句的SQL查询:
WHERE NAME LIKE '%some_criterion%'
这有一些性能影响,因为数据库无法有效地使用名称列上的索引(索引扫描v.s.索引如果我没有弄错)。
为了解决这个问题,我可以决定只StartsWith()来代替,产生使用类似条款就像一个查询:
WHERE NAME LIKE 'some_criterion%'
使SQL Server使用的索引查找和成本提供性能一些功能。
我希望能够为用户提供一个选择:默认使用StartsWith的行为,但是如果用户想要使用Contains()进行搜索的“增加的灵活性”,那么应该使用这个选项。
有什么我试图
我以为这是小事,并继续实施对字符串的扩展方法。但是,当然,LINQ不接受这个,并抛出异常。
现在,我当然可以去使用if或switch语句并为每个案例创建一个查询,但我更愿意解决这个问题“更高层次”或更一般化。 简而言之:由于实际应用程序的复杂性,使用if语句来区分用例是不可行的。这会导致很多重复和混乱。我真的想以某种方式封装不同的行为(Contains,StartsWith,EndsWith)。
问题
我应该到什么地方或者我应该怎么找?这是与IQueryables组合的情况吗?我很困惑!
Criterium。单数的标准。 – Oxymoron 2013-03-18 14:08:20
这将是“标准”。 – 2013-03-18 14:08:58
啊哈,好的。没有意识到。过度规则适用于我自己的语言英语;) – Oxymoron 2013-03-18 14:10:45