【问题标题】:ADO.NET Entity Framework: Converting String to Int in Where/OrderBYADO.NET Entity Framework:在 Where/OrderBY 中将 String 转换为 Int
【发布时间】:2011-08-15 16:28:51
【问题描述】:

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

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

我不确定这是否可能……有人知道方法吗?

谢谢。

【问题讨论】:

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


【解决方案1】:

反过来试试。我假设“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 或使用自定义比较器。

【讨论】:

  • 按字符串值排序不会给您与按数值排序相同的顺序 - “11”将在“1”之后,但在“2”之前。
  • @Morawski - 按 C.KeyAsString.Length、c.KeyAsString 排序
  • @Aducci @Morawski: KeyAsString 不能有前导零(“2”将在“01”之前)并且没有负数(“0”将在“-1”之前)。
【解决方案2】:

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

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!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 2010-10-31
相关资源
最近更新 更多