实体框架if语句里面选择

时间:2017-12-06 08:55:46

标签: sql asp.net entity-framework

我在生成实体框架查询时遇到问题,但对于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()

我想得到"不变" string,如果min和max的值都为零,否则将它们连接起来

4 个答案:

答案 0 :(得分:4)

使用conditional operator

// ...

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

答案 1 :(得分:1)

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

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();

答案 2 :(得分:1)

显然,表格中的所有元素都包含属性minmax

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

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

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

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

结果是一个字符串列表,如:

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

你确定要这个吗?

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

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();

答案 3 :(得分:0)

抱歉,我现在无法尝试,但我认为这应该有效

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()