【问题标题】:casting a string to int insisde Linq lambda WHERE method在 Linq lambda WHERE 方法中将字符串转换为 int
【发布时间】:2015-02-12 04:18:49
【问题描述】:

我正在尝试使用字符串列上的 where 子句选择行,并与我的变量 zip(它是 int)进行比较。这可能吗?我在 lambda 中尝试过 int.Parse() 但这不起作用。由于我使用的是 .NET 3.5,因此我似乎无法使用 SQLFunctions 调用。

下面的 PostcodeStart/PostcodeEnd 是 nvarchar,而 zip 是 int。

var re = postCodes.Where(
                x => x.PostcodeStart <= zip && x.PostcodeEnd >= zip);

【问题讨论】:

  • 你试过(int) x.PostcodeStart吗?
  • 是的,这不允许我编译。无法将字符串类型转换为 int 类型...
  • 究竟有什么不能与 int.Parse 一起使用?
  • 这是我在尝试使用 int.Parse() 时遇到的错误:Method 'Int32 Parse(System.String)' has no supported translation to SQL.
  • Convert.ToInt32(string_here) 怎么样?

标签: c# .net linq lambda


【解决方案1】:

在 Linq 调用之前将您的 int 转换为字符串:

string zipString = zip.ToString("00000");
var re = postCodes.Where(
                x => x.PostcodeStart.CompareTo(zipString) <= 0 
                  && x.PostcodeEnd.CompareTo(zipString) >= 0);

附带说明,int 不是保存邮政编码的好类型。您不仅需要担心前导零,而且邮政编码还有四位数的扩展名 ("00000-0000")。最好将它们保留为字符串。

【讨论】:

  • 更不用说在某些时候您将不得不与其他国家打交道,而且您的邮政编码中也会包含字符。
  • 这不起作用,在进行字符串比较时不能使用大于或小于运算符。
  • @WesleyLong "10222-SHOE" 是纽约萨克斯第五大道旗舰店的有效美国邮政编码,这要归功于美国邮政局十年前以某种方式同意的超级营销策略。是的角落案例!
  • @PrestonGuillot - 我知道!我想我会用那个赢得几个酒吧赌注。谢谢!
猜你喜欢
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多