LinqtoSQL / C#:如何在这种情况下使用三元语句

时间:2012-07-30 20:38:41

标签: c# linq-to-sql

我有以下Linq to SQL:

var finalResults =

    (from d in data
    group d by new { d.LocationName, d.Year, d.Month, d.Denominator, d.Numerator } into groupItem
    orderby groupItem.Key.Year, groupItem.Key.Month, groupItem.Key.LocationName 
    select new
    {
        IndicatorName = IndicatorName,
        groupItem.Key.LocationName,
        Year = string.Format("{0}", (int?)groupItem.Key.Year),
        Month = string.Format("{0:00}", (int?)groupItem.Key.Month)                     
        Numerator = groupItem.Sum(x => x.Numerator),
        groupItem.Key.Denominator,

    }).ToList();

问题是Year和Month都有一些空字符串。发生这种情况时,我想用“不可用”替换空字符串。我尝试做这样的三元声明:

Year = string.Format("{0}", (int?)groupItem.Key.Year) == "" ? "Not Available" :  string.Format("{0}", (int?)groupItem.Key.Year),
Month = string.Format("{0:00}", (int?)groupItem.Key.Month) == "" ? "Not Available" :  string.Format("{0:00}", (int?)groupItem.Key.Month),                     

我试图做的是“如果年(或月)有一个空字符串,显示”不可用“否则显示值

然而,这并没有做我想做的事情,因为我仍然失败了我的

Assert.AreNotEqual(“”,endItem.Year);
  Assert.AreNotEqual(“”,endItem.Month);

测试。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我强烈建议在LINQ to Objects中进行最终操作。在LINQ to SQL中计划所需的所有位,然后使用AsEnumerable返回LINQ to Objects:

var sqlQuery = from d in data
               group d by new { d.LocationName, d.Year, d.Month, 
                                d.Denominator, d.Numerator } into groupItem
               orderby groupItem.Key.Year, groupItem.Key.Month, 
                       groupItem.Key.LocationName 
               select new
               {
                   IndicatorName,
                   groupItem.Key.LocationName,
                   groupItem.Key.Year,
                   groupItem.Key.Month,
                   Numerator = groupItem.Sum(x => x.Numerator),
                   groupItem.Key.Denominator,
               };

var finalResult = sqlQuery.AsEnumerable()
     .Select(item => new {
                 item.IndicatorName,
                 item.LocationName,
                 Year = item.Year == null ? "Not Available" 
                                          : item.Year.ToString(),
                 Month = item.Month == null ? "Not Available" 
                                            : item.Month.ToString("00"),
                 item.Numerator,
                 item.Denominator
             })
     .ToList();

当您使用LINQ to Objects时,更容易推断在复杂场景中会发生什么 - 您不必担心空值处理等方面的差异。

答案 1 :(得分:0)

为什么要比较格式化值和原始值?

Year = groupItem.Key.Year == "" ? "Not Available" :  string.Format("{0}", (int?)groupItem.Key.Year),
Month = groupItem.Key.Month == "" ? "Not Available" :  string.Format("{0:00}", (int?)groupItem.Key.Month),