在查询人员时,此语句应返回一些结果中带有“And”的结果 -
var results = repository.GetQuery().Where(p => p.Names
.Select(n=> n.LastName)
.Contains("And");
它不返回任何结果。如果我们将其更改为 -
var results = repository.GetQuery().Where(p => p.Names
.Select(n=> n.LastName)
.Contains("Anderson");
我们得到所有姓安德森的人。
显然它正在被转换为SQL而不是Like。此外,我们将其修改为 -
var results = repository.GetQuery().Where(p => p.Names
.Select(n=> n.LastName)
.FirstOrDefault()
.Contains("And");
返回所有在姓氏中任何位置都有“And”的人,不幸的是它只检查该人的第一个姓氏。
var results = repository.GetQuery().Where(p => p.Names
.Any(n=> n.LastName
.Contains("And"));
正常工作,但我们不能按照我们想要的方式使用它。
答案 0 :(得分:0)
看起来你正试图这样做:
Select *
From Names
Where LastName like 'And%'
.Contains()方法仅适用于完全匹配。您可以使用Linq to SQL并指定您要查找的确切SQL,但使用存储过程可能会更好。
这看起来会有所帮助:LINQ to SQL and wildcard searches
答案 1 :(得分:0)
长期以来一直在研究这个动态搜索问题......我无法通过树木看到森林。
这不起作用,因为它是一个只返回完美匹配的IEnumerable.Contains方法。
var results = repository.GetQuery().Where(p => p.Names
.Select(n=> n.LastName)
.Contains("And");
这是有效的,因为它使用的是String.Contains方法。
var results = repository.GetQuery().Where(p => p.Names
.Any(n=> n.LastName
.Contains("And"));
它们是两种不同的Contains方法。我们最后一个使用动态搜索。