【问题标题】:LinqPad like operator errorLinqPad 类似操作员错误
【发布时间】:2012-06-18 20:41:54
【问题描述】:

我是 linqpad 和 C# 的新手。 我希望在 odata 中获取以“ic”开头的 id 列表。 我尝试了 SqlMethods.like 并得到了这个错误。 "当前上下文中不存在名称 'SqlMethods'"

下面是查询

from id in Products

where SqlMethods.Like(id.ProductId, "IC%")

select id

请帮忙。找不到解决办法

【问题讨论】:

  • 您的语言是否设置为 C# 语句?我运行了类似的东西(一般语法),它对我来说很好
  • 没有。我正在使用 C# 表达式。当我使用 C# 语句时,我需要将代码更改为“var query = from id in Products where SqlMethods.Like(id.ProductId, "IC%") select id; Console.WriteLine(query);”仍然得到同样的错误
  • 您确定您的 SqlMethods 拼写完全正确 与您的示例代码一样吗?如果您使用完全限定名称,即 System.Data.Linq.SqlClient.SqlMethods 有什么不同吗?
  • 是的,我确实拼写正确并尝试了完全限定的名称。我现在遇到的错误是“无法执行文本选择:‘System.Data’是一个‘命名空间’,在给定的上下文中无效当前上下文中不存在名称‘Linq’”
  • 当您使用 OData 连接时,LINQPad 不会自动导入“System.Data.Linq.* 命名空间;因此会出现错误。当然,SqlMethods 类无论如何都不能与 OData 一起使用,因为人们已经指出。

标签: sql operator-keyword sql-like linqpad


【解决方案1】:

OData 不支持 Like 运算符。所以即使你得到上面的编译它仍然不能正常工作。如果您只想查找所有 id 以 IC 开头的产品,您可以使用 StartsWith 方法:

from id in Products
where id.ProductId.StartsWith("IC")
select id;

【讨论】:

  • 我什至尝试过,它部分工作。当我输入 IC-100 时,我会检索数据,但当我只输入 IC 时,我不会。它给了我错误。
  • 你能发布你正在使用的代码和你得到的错误(使用调用堆栈)吗?
  • 感谢大家的帮助。我不使用 SqlMethods。我将 .StartsWith 用于我的目的。
【解决方案2】:

另一种选择是使用 Contains 方法:

from id in Products
where id.ProductId.Contains("IC")
select id;

这实际上会在 SQL 中生成一个 LIKE 语句。

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 2015-04-13
    • 2019-03-24
    • 2015-12-06
    • 2011-10-29
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多