2017-02-15 115 views
0

这里是我的表结构,所有列十进制:LINQ的SQL过滤列

id column1 column2 column3 
1 11.00 11.12 11.12 
2 5.00 4.95 0 
3 7.00 7.05 0 
4 6.00 6.05 6.06 
5 9.00 9.05 8.5 

如果我这样的查询:

List<stuff> stuffs = db.table.Where(a => a.column1 > a.column3).ToList(); 

返回线2,3和5.

但是,我需要检查column3是否为零,然后如果需要检查column2

像: 列1>如果(栏3> 0)栏3列2其他

从我的表,它应该返回只有2和5

我如何modfied这个来实现它:

List<stuff> stuffs = db.table.Where(a => a.column1 > (a.column3 == 0 ? a.column2 : true)).ToList(); 

非常感谢!

+0

就像您在伪代码中写的一样; 'a.column3> 0? a.column3:a.column2' – Rob

回答

2

你令人难以置信地接近。只需将true替换为a.column3即可:

List<stuff> stuffs = 
    db.table.Where(a => a.column1 > (a.column3 == 0 ? a.column2 : a.column3)).ToList(); 
+1

我刚查过,LINQtoSQL的确把它转换成WHERE [Column1]>(CASE WHEN [Column3] = 0 THEN [Column2] ELSE [Column3] END)' – NPras