在 C# LINQ 中使用 SQL LIKE 运算符

新手上路,请多包涵

我正在用 C# 建立一个查询。对于整数和字符串字段,大小写非常简单。对于日期字段,我使用以下查询:

 list.Where("myDateColumn >= DateTime(2017,1,20)");

如何在 LINQ 中执行以下 SQL LIKE 查询?

 select * from table where myTextColumn LIKE '%abc%';

原文由 Behzad Qureshi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

Linq 中的 Like 有很多可能性:

对于 LIKE ‘%abc%’;

 list.Where(x => x.myTextColumn.Contains('abc'));

对于 LIKE ‘abc%’;

 list.Where(x => x.myTextColumn.StartWith('abc'));

对于 LIKE ‘%abc’;

 list.Where(x => x.myTextColumn.EndsWith('abc'));

更新: 如果您还需要添加日期比较意味着您可以执行以下操作:

 DateTime date2Compare = new DateTime(2017, 1, 20);
list.Where(x => myDateColumn >= date2Compare && x.myTextColumn.Contains('abc'));

原文由 sujith karivelil 发布,翻译遵循 CC BY-SA 3.0 许可协议

虽然其他答案(包括接受的答案)是 80% 正确的,但有一些警告。

T-SQL 允许 Like 语句不仅在字符串的开头和结尾使用通配符,而且在中间也可以使用。并且 % 不是语法中唯一的特殊字符,有关详细信息,请参阅 文档

.NET Core 有 EF.Functions.Like() 直译为 LIKE 语句的方法。请参见下面的示例。

 //assuming there is a db context with a table of Foos
await using var dbContext = new SqlContext();

//assuming table of Foos has Ipsum, Iptum, Ipuum
var result = dbContext.Foos.Where(x
    => EF.Functions.Like(x.Bar, "Ip_um"));

注意事项:

  • 这仅适用于服务器端评估。尝试在客户端评估中使用此功能将抛出 NotSupportedException
  • EF.Functions.LikeContainsStartsWith 之间的 SQL 转换存在显着差异,这可能会 影响性能

如果您确定您正在使用服务器端评估并且性能很重要,请使用 EF.Functions.Like

原文由 KifoPL 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏