【问题标题】:LINQ Like Clause - Without Wildcard operatorLINQ Like 子句 - 没有通配符运算符
【发布时间】:2014-01-07 15:21:23
【问题描述】:

我想编写一个带有 Like 运算符但没有 WildCard 运算符的 LINQ to SQL 查询。

我知道以下几点:

包含将等同于此:a like '%b%' StartsWith 将等效于此:a like '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 上很明显。

请告诉我。

提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

    你可以使用:

    SqlMethods.Like
    

    喜欢:

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

    【讨论】:

    • 编译器无法识别方法SqlMethods.Like;即使这应该是 Linq to SQL。 @戴夫比什
    • @t_plusplus - 什么?添加对 System.Data.Linq.SqlClient.SqlMethods 的引用
    【解决方案2】:

    Equals 执行“顺序(区分大小写和不区分区域性)比较”在与 Linq to SQL 或实体框架一起使用时不适用,因为该语句将被转换为 SQL。
    数据库collation(或列排序规则,如果设置)将决定如何处理"="(等于)。

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-02-08
      • 1970-01-01
      • 2011-07-19
      • 2017-10-26
      • 1970-01-01
      相关资源
      最近更新 更多