Ling to Entity将Null或Empty转换为Int

时间:2011-10-06 14:55:07

标签: linq entity-framework linq-to-entities null int

您好我有一个返回Zipcode的Linq to Entity语句。
我将此返回邮政编码存储在我的强类型列表中 在我的List Zipcode数据类型是int
当我的Liq语句返回Zipcode时,有一些NULL和空值
我无法将这些NULL和Empty值转换为int
我该如何处理这种情况呢 我试过这样的事情

ZipCode= Convert.ToInt32(p.ZipCode ?? "0")

非常感谢任何帮助。

感谢

3 个答案:

答案 0 :(得分:1)

如果你在内存中执行此操作(在已从数据库中提取结果之后),并在一行中执行此操作,则应编写类似

的内容
int zip = Convert.ToInt32(!string.IsNullOrEmpty(p.ZipCode) ? p.ZipCode : "0");

如果您尝试将字符串转换为数据库中的查询内部的整数,则可能必须定义自定义函数,该函数将转换转换为数据库中的正确转换。 See this related question for a possible implementation

但是,我建议你将邮政编码转换为整数。一个zip 一个数字值,尽管是由数字组成(在世界的某些地方)。将它视为一个正确的字符串,看起来你已经在p内部(可能是数据库)。同样的前提适用于电话号码,SSN,帐号等。

答案 1 :(得分:0)

如果没有看到您的实际查询并假设p.ZipCode是一个字符串,您可以执行类似这样的操作以转换为int

var query = from p in context.Entity
            let ZipCode = context.Entity.Take(1).Select(x => (p.ZipCode == null || p.ZipCode == "") ? "0" : p.ZipCode).Cast<int>().FirstOrDefault()
            select ZipCode;

答案 2 :(得分:0)

我首先要定义一个解析整数的lambda函数,如下所示:

Func<string, int> parse = t =>
{
    int v;
    if (!int.TryParse(t, out v))
    {
        v = 0;
    }
    return v;
};

然后你只需要这样做:

var zipCodes =
    from e in db.Entity
    select parse(e.ZipCode);

美好而简单!