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

3

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

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

我不确定这是否可行... 有人知道方法吗?谢谢。

使用定义的模型函数的解决方案:https://dev59.com/0m025IYBdhLWcg3w3J1H。 - Slauma
可能相关的问题: https://dev59.com/YnE95IYBdhLWcg3wN7Kv - APC
2个回答

3
尝试使用另一种方式。我假设“key”是一个变量int,因此通过使用ToString()将其转换为字符串,并使用该字符串与KeyAsString进行比较,在order by中不要使用强制转换:
var keyString = key.ToString();
var query = from c in context.Table
where keyString == c.KeyAsString
order by c.KeyAsString
select c

如果您在使用order by时遇到问题,请使用像ToList()ToArray()这样的方法将结果拉入内存,然后您就可以将其转换为int或使用自定义比较器。


按字符串值排序不会给你与按数值排序相同的顺序 - "11"将在"1"之后,但在"2"之前。 - Konrad Morawski
6
按照C.KeyAsString的长度和字母顺序排序。 - Aducci
2
@Aducci @Morawski:KeyAsString不能有前导零(例如,“2”应该在“01”之前),也不能有负数(例如,“0”应该在“-1”之前)。 - Slauma

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; 

那帮了我大忙!谢谢 @Aducci! - pinus.acer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接