【问题标题】:Entity Framework if statement inside select实体框架 if 语句在 select 中
【发布时间】:2017-12-06 08:55:46
【问题描述】:

我在生成实体框架查询时遇到问题,并且不能使用 linq 样式一:.....

这是我的尝试:

var query = db.table
              .Where(x => x.colA == 1)
              .GroupBy(x => new {x.min,x.max})
              .Select(y => if(y.key.min==0 && y.key.max==0)
                              { " unchanged " } 
                           else 
                              { y.key.min.tostring()+" "+y.key.max.tostring() })
              .ToList()

如果最小值和最大值都为零,我想得到“未更改”的字符串,否则将它们连接起来

【问题讨论】:

    标签: sql asp.net entity-framework


    【解决方案1】:

    使用conditional operator

    // ...
    
    .Select(y=> y.key.min==0 && y.key.max==0 
                 ? " unchanged " 
                 : y.key.min.tostring()+" "+y.key.max.tostring())
    // ...
    

    【讨论】:

      【解决方案2】:

      显然,您表中的所有元素都有属性minmax

      GroupBy(x=> new {x.min,x.max}) 之后,您将拥有一系列组,其中每个组都有一个键 {min, max},组中的所有元素的 min 和 max 属性都有这个值。

      GroupBy 之后,您选择每个组,并从每个组中选择一个字符串。你摆脱了组的元素。

      您选择的字符串取决于组的键:如果键 = {0, 0} 您选择字符串“未更改”,否则您选择字符串:

      y.key.min.tostring()+" "+y.key.max.tostring()
      

      结果是一个字符串列表,类似于:

       "3 7",
       "4 10,
       "unchanged",
       "2 8",
      

      你确定要这个吗?

      在这种情况下,您将不需要 GroupBy。 Distinct会更简单更快

      List<string> result = db.table
         .Where(tableRow => tableRow.colA == 1)
         .Select(tableRow => tableRow.min==0 && tableRow.max==0 
               ? " unchanged " 
               : tableRow.min.tostring()+" "+tableRow.max.tostring())
         // from here you have a sequence of strings
         // get rid of duplicates:
         .Distinct()
         .ToList();
      

      【讨论】:

      • 感谢您的完整描述@harald coppoolse...本节中的大多数答案都是正确的...由于完整的描述和理解,我标记了这个答案
      【解决方案3】:

      对于这种特定情况,您可以使用条件运算符 (?:)

      var query = db.table
                  .Where(x=> x.colA == 1)
                  .GroupBy(x=> new {x.min,x.max})
                  .Select(y=> (y.Key.min == 0 && y.Key.max == 0) ? " unchanged" : (y.Key.min.ToString()+" "+y.Key.max.ToString()))
                  .ToList();
      

      【讨论】:

        【解决方案4】:

        对不起,我现在不能尝试,但我认为这应该可行

        var query = db.table
           .Where(x=> x.colA == 1)
           .GroupBy(x=> new {x.min,x.max})
           .Select(y=>  {if(y.key.min==0 && y.key.max==0)
                        { 
                            " unchanged " 
                        } else 
                        { 
                            y.key.min.tostring()+" "+y.key.max.tostring(); 
                        } return y;})
            .ToList()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-04-05
          • 2011-12-15
          • 2014-09-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-13
          • 1970-01-01
          相关资源
          最近更新 更多