LINQ Like Clause - 没有Wildcard运算符

时间:2014-01-07 15:21:23

标签: c# linq linq-to-sql entity-framework-4 linq-to-entities

我想用Like运算符编写LINQ to SQL查询,但没有使用WildCard运算符。

我知道以下内容:

包含将与此相同:类似'%b%' StartsWith将与此相当:类似'b%',而EndsWith则相反。

Equals可以做到,但“此方法执行序数(区分大小写和文化不敏感)比较。”

我现在的做法是这样的:

var  loc  = (from l in data.Locations.OrderBy(l => l.LocationName)
    join s in data.LocationSecurities.Where(s=> s.UserName.ToLower().Equals(userName.ToLower())) on l.LocationID equals s.LocationId
    select new
    {
        LocationId = l.LocationID,
        Name = l.LocationName
    }
    ).Distinct().ToList();

但这只是一种解决方法,因为我想要做的就是简单地使用相同的Like,但是使用WildCard,这在SQL Server Profiler上明显清晰。

请告诉我。

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

您可以使用:

SqlMethods.Like

像:

.Where(s => SqlMethods.Like(s.UserName, userName))

答案 1 :(得分:0)

Equals执行“序数(区分大小写和文化不敏感)比较”在与Linq to SQL或Entity框架一起使用时不适用,因为该语句将被翻译成SQL。
数据库collation(或设置的列排序规则)将确定如何处理"="(等于)。