ADO.NET实体框架:在Where / OrderBY中将String转换为Int

时间:2011-08-15 16:28:52

标签: c# .net linq entity-framework entity-framework-4

我正在针对ObjectContext编写LINQ查询。我在LINQ to Entities中基本上需要做的就是这个(我知道这不起作用,但我这样做是为了说明):

from c in context.Table
where key == int.Parse(c.KeyAsString)
order by int.Parse(c.KeyAsString)
select c

我不确定这是否可能......有人知道吗?

感谢。

2 个答案:

答案 0 :(得分:3)

反过来尝试一下。我假设“key”是一个变量int,所以使用ToString()将其转换为字符串,并使用它来与KeyAsString进行比较,并按顺序不要使用强制转换:

var keyString = key.ToString();
var query = from c in context.Table
where keyString == c.KeyAsString
order by c.KeyAsString
select c

如果您通过使用ToList()ToArray()之类的方法将结果存入内存而无法处理订单,那么您将能够转换为int或使用自定义比较器。< / p>

答案 1 :(得分:1)

这不是最干净的解决方案,但只要所有字符串都是有效整数,它就会起作用。这也可以和双打一起使用

var query = from c in context.Table
            let IntOrder = context.Table.Take(1).Select(x => c.KeyAsString).Cast<int>().FirstOrDefault()
            where IntOrder == key
            orderby IntOrder
            select c;