我在生成实体框架查询时遇到问题,但对于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的值都为零,否则将它们连接起来
答案 0 :(得分:4)
// ...
.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)
显然,表格中的所有元素都包含属性min
和max
在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()