【发布时间】:2016-02-26 02:04:49
【问题描述】:
我需要从 DataSet 查询中排除一列,其中该列仅包含 0(空值)。
我找到的所有解决方案(例如:Filtering Null values in Select)只处理每行的条件,不会根据我的需要考虑列中的所有值。
查询需要是通用的,才能在多个不同的数据表中使用,因此我无法明确声明要排除的列名。
我试过的最新代码是:
theTable = result.Tables[0];
var query = theTable.AsEnumerable().Select(r => r.ItemArray.Where(c => long.Parse(c.ToString()) != 0));
这会排除行中的所有 0,但它不会保持列结构,并且我最终会得到具有不同长度(列大小)的行。
这是我的示例 SQL 供参考:
SELECT t1.TableIndex
, CASE WHEN t1.EntityName <> t2.EntityName THEN 1 ELSE 0 END AS EntName
, CASE WHEN t1.EntityNumber <> t2.EntityNumber THEN 1 ELSE 0 END AS EntNumber
FROM DbEnv.dbo.tblOne t1 (NOLOCK)
INNER JOIN DbEnv.dbo.tblTwo t2 (nolock) ON t1.TableIndex = t2.TableIndex
WHERE t1.EntityName <> t2.EntityName
OR t1.EntityNumber <> t2.EntityNumber
示例数据集(在这种情况下,应仅排除 Col2):
Col1 | Col2 | Col3
Row1: 0 0 1
Row2: 1 0 1
Row3: 0 0 0
示例数据集 2(在这种情况下,应排除 Col1 和 Col4):
Col1 | Col2 | Col3 | Col4 | Col5
Row1: 0 0 1 0 1
Row2: 0 0 1 0 1
Row3: 0 1 0 0 1
Row3: 0 1 0 0 1
(解决方案可以使用 SQL 或 LINQ,但我认为使用 LINQ 解决方案会更简洁)
【问题讨论】: