c# - 如果两个字符串都包含值,则需要连接两个字符串;如果第一个字符串为 NULL,则返回一个值

标签 c# .net linq linq-to-sql

在此处输入代码在我的 SQL Server 数据库中,我单独存储了子编号(例如 802 号单元)和街道编号(例如 242 Elizabeth Street)的地址信息。

如果 subNumber 包含值,我需要将它们显示为一个(即 802/242 Elizabeth Street),否则只需返回 streetNumber(如果不包含值)。

在通过 LINQ 访问数据后,我一直致力于使用 IF ELSE 和 foreach 循环来寻找解决方案 - 但在完成循环后我陷入了困境。我也很乐意使用 SQL 中的 SELECT 存储过程来做到这一点 - 接受建议!

DataClassesDataContext dc = new DataClassesDataContext();

var recent = from p in dc.Properties
             orderby p.modtime descending
             where p.status == "Current"
             select new
             {
                 rsub = (p.subNumber).ToString(),
                 rnumber = (p.streetNumber).ToString(),
                 rstreet = p.street,
                 rsuburb = p.suburb,
                 rurl = p.propertyURL,
             };

foreach (var home in recent)
{
    if (string.IsNullOrEmpty(home.rsub))
    {
        string rnum = home.rnumber;
    }
    else
    {
        string rnum = home.rsub + "/" + home.rnumber;
    }
}

recentrepeater.DataSource = recent;
recentrepeater.DataBind();

Yahia 给出了 C# 中的最佳选择 - 这是我最终得到的 SQL 解决方案:

ALTER PROCEDURE GetPropertyShort

AS
SELECT TOP 5 ISNULL(convert(varchar(5), subNumber) + '/' + convert(varchar(5), streetNumber), convert(varchar(5), streetNumber)) as Number, street, suburb, propertyURL, modtime
FROM Property
ORDER BY modtime DESC

最佳答案

尝试

var recent = from p in dc.Properties
        orderby p.modtime descending
        where p.status == "Current"
        select new
       {
            rsub = (p.subNumber).ToString(),
            rnumber = (p.streetNumber).ToString(),
            rnum = string.IsNullOrEmpty((p.subNumber).ToString()) ? (p.streetNumber).ToString() : (p.subNumber).ToString() + "/" + (p.streetNumber).ToString(),
            rstreet = p.street,
            rsuburb = p.suburb,
            rurl = p.propertyURL,
        };

关于c# - 如果两个字符串都包含值,则需要连接两个字符串;如果第一个字符串为 NULL,则返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7313113/

相关文章:

c# - 在 C# 中使用 OData 服务不起作用

c# - 将查询理解转换为 LINQ 中的可枚举扩展方法

c# - 带有 Prev/Next 的 IEnumerable

c# - 如何在 C# 2010 的表单中创建自定义组件?

c# - 如何比较两个数据表的单元格值

c# - 将 char 与 int 和 string 连接起来会产生奇怪的结果

c# - 从 Java 运行 C# 代码,反之亦然

MySQL 时间戳到 .NET 时间戳

c# - 如何从 Postman 将 XML 传递到 ASP.Net Core 中的 Web API

c# - math.sqrt 与 Newton-Raphson 方法在 c# 中求根