如何编写LINQ来转换数据类型并连接字符串?

时间:2011-08-15 16:09:21

标签: linq

我是LINQ的新手,我希望在C#中将一种数据类型转换为另一种数据类型,以及连接一个字符串。我该如何做到这一点?

例如,SQL语句

是什么
SELECT IPv4 = CONVERT(varchar(3), IPv4_octet1) + '.' +
              CONVERT(varchar(3), IPv4_octet2) + '.' +
              CONVERT(varchar(3), IPv4_octet3) + '.' +
              CONVERT(varchar(3), IPv4_octet4) FROM table;

在LINQ? (IPv4_octet在SQL表中存储为tinyints。)

2 个答案:

答案 0 :(得分:2)

在这种情况下,我怀疑你可以写:

var query = data.Select(x => x.IpV4Octet1 + "." + 
                             x.IpV4Octet2 + "." + 
                             x.IpV4Octet3 + "." + 
                             x.IpV4Octet4);

更一般地说,你打电话给ToString,例如:

// You wouldn't want to actually do this, but...
var query = data.Select(x => x.IpV4Octet1.ToString() + x.IpV4Octet4.ToString());

如果你想要更多控制,并且你没有在查询的其余部分中使用结果,你可能希望在.NET端进行格式化 - 只需在选择时使用AsEnumerable您希望从数据库中获取所有信息,然后在LINQ to Objects中完成剩下的工作。例如:

var query = db.Select(x => new { x.HostName, x.IpV4Octet1, x.IpV4Octet2,
                                 x.IpV4Octet3, IpV4Octet4 })
              .AsEnumerable() // Switch to LINQ to Objects for rest of query
              .Select(x => new { x.HostName,
                                 Address = string.Format("{0}.{1}.{2}.{3}"),
                                                         x.IpV4Octet1,
                                                         x.IpV4Octet2,
                                                         x.IpV4Octet3,
                                                         x.IpV4Octet4) });

答案 1 :(得分:0)

试试这个:

string ipv4 = string.Join('.',octets.Select(o => o.ToString()).ToArray());