【问题标题】:Linq Query on int using string使用字符串对 int 进行 Linq 查询
【发布时间】:2009-07-27 12:40:11
【问题描述】:

我正在尝试使用 Linq to Entities 查询表的唯一参考号。 ID 是通过文本框提供的,因此在我的代码中是一个字符串。显然,在数据库表中,该字段是一个整数,所以我尝试先使用 .ToString,然后再使用 .Contains,就像使用 varchar() 一样。这似乎不起作用,错误来自 .ToString 方法。

你是怎么做到的?我尝试将文本框内容转换为整数,但这意味着用户必须输入确切的 int 而不是部分数字。

非常感谢

【问题讨论】:

  • 提供一个不适合您的 LINQ 查询示例。

标签: linq linq-to-entities


【解决方案1】:

我不确定为什么 toString 不适合你。我已经尝试过这种方法。两者都返回了答案:

List<int> ids = new List<int>() { 111, 211, 311, 422, 522, 622, 733, 833, 933 };
string query = "11";

var result = ids.Where(id => id.ToString().Contains(query));
var result2 = ids.ConvertAll<string>(i => i.ToString()).Where(id => id.Contains(query));
// Both return the first three items

【讨论】:

  • 虽然代码对于 linq-to-objects 可以正常工作,如您的代码所示,但 Linq-to-entities 可能不喜欢这样,因为它可能无法很好地转换为 SQL,这就是表达式的含义在 OPs 情况下转换为。
【解决方案2】:
int value;
if(int.TryParse(someTextString,out value))
{
    //do work here using integer comparision with 'value'
}

“部分”价值是什么意思?无论您向用户提供的字符串“添加”什么,您仍然可以在解析值之前执行此操作。你的解释不是很清楚。

如果您确实在尝试进行通配符搜索,则使用 Linq-to-entities 针对 DB int 值将失败。我怀疑 lte 对 sometable.intvalue.ToString().Contains() 有什么意义。在这种情况下,您可能需要进行一些客户端数学运算来确定需要检索的范围,或者编写一个在 SQL 端进行搜索的存储过程。

【讨论】:

  • 我猜他的意思是他希望能够输入“12”并获得“12”、“121”和“1234”……(甚至可能是“312”?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
相关资源
最近更新 更多