2009-07-27 75 views
2

我想查询使用Linq to Entities的表的唯一引用号。该ID通过文本框提供,因此在我的代码中提供了一个字符串。很显然,在数据库表中,这个字段是一个整数,所以我尝试过使用.ToString,然后.Contains以与varchar()相同的方式使用。这似乎不起作用,错误来自.ToString方法。Linq使用字符串int的查询

你是如何做到这一点的?我试图将文本框内容转换为整数,但这意味着用户将不得不输入确切的整数而不是部分数字。

非常感谢

+2

提供一个不适合您的LINQ查询的示例。 – 2009-07-27 12:41:49

回答

-1
int value; 
if(int.TryParse(someTextString,out value)) 
{ 
    //do work here using integer comparision with 'value' 
} 

不管你说的 “部分” 的价值呢?无论你是“添加”到用户提供的字符串,你仍然可以在分析值之前做。你的解释不是很清楚。

如果您确实试图进行通配符搜索,则使用Linq-to-entities对数据库int值进行失败。我怀疑lte会对sometable.intvalue.ToString()。Contains()产生多大的意义。在这种情况下,您可能需要执行一些客户端数学计算,以找出需要检索的范围,或者编写一个在SQL端进行搜索的存储过程。

+0

我想他的意思是他想要能够输入“12”并返回“12”“121”和“1234”......(甚至mayb甚至“312”?) – Benjol 2009-07-27 12:52:56

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 
+3

虽然代码对于linq-如你的代码演示的那样,Linq-to-entities可能不喜欢这样做,因为它可能无法很好地转换为SQL,这是表达式将在OP中转换为的情况。 – spender 2009-07-27 14:26:05