C# 是否可以删除select查询中的列
如问题所示,我想从select查询中删除列,其中该列为空C# 是否可以删除select查询中的列,c#,linq,C#,Linq,如问题所示,我想从select查询中删除列,其中该列为空 var query = from a in ... select new { A =(decimal?)null, B =(decimal?)null, C = a.Amount1 }; var query2 = from b in ... select new { A = b.Amount2, B = b.Amount3, C = (decimal?)null }; var query
var query = from a in ...
select new
{
A =(decimal?)null,
B =(decimal?)null,
C = a.Amount1
};
var query2 = from b in ...
select new
{
A = b.Amount2,
B = b.Amount3,
C = (decimal?)null
};
var query3 = query.Concat(query2);
输出:
query3=[0]{A=null, B=null, C=100.00}
[1]{A=100.00, B=50.25, C=null}
query3=[0]{C=100.00}
[1]{A=100.00, B=50.25}
预期结果:
query3=[0]{A=null, B=null, C=100.00}
[1]{A=100.00, B=50.25, C=null}
query3=[0]{C=100.00}
[1]{A=100.00, B=50.25}
LINQ查询通常输出公共类型的对象,因此每个对象必须具有相同的基类型(以及相关列)。连接不同类型对象的唯一方法是将它们转换为对象
:
var query = from a in ...
select new
{
C = a.Amount1
};
var query2 = from b in ...
select new
{
A = b.Amount2,
B = b.Amount3,
};
var query3 = query.Cast<object>().Concat(query2.Cast<object>());
或者充其量:
dynamic list = query3.ToList();
Console.WriteLine(list[0].C);
Console.WriteLine(list[1].A);
但是在任何情况下,您都将失去编译时类型安全性。LINQ查询通常输出公共类型的对象,因此每个对象都必须具有相同的基类型(以及关联的列)。连接不同类型的对象的唯一方法是将它们强制转换为对象
:
var query = from a in ...
select new
{
C = a.Amount1
};
var query2 = from b in ...
select new
{
A = b.Amount2,
B = b.Amount3,
};
var query3 = query.Cast<object>().Concat(query2.Cast<object>());
或者充其量:
dynamic list = query3.ToList();
Console.WriteLine(list[0].C);
Console.WriteLine(list[1].A);
但是在任何情况下,您都将失去编译时类型安全性。您不能这样做。结果集必须包含相同类型的项,即使字段为null,它们也必须存在
您无法在UI中显示它们,但具体如何显示将取决于UI。您不能这样做。结果集必须包含相同类型的项,即使字段为null,它们也必须存在
您不能在UI中显示它们,但具体的显示方式取决于UI。您不能。类有一组预定义的字段(更不用说有一些编译器技巧的
ExpandoObject
),这与您使用的匿名类型相同
您不能只隐藏或删除未填充的字段。如果您迭代实例并尝试检索item.C
,该字段为空并因此被删除,会怎么样?这通常会导致编译器错误。NET如何解决此问题
你唯一能做的另一件事是在你的列表中放入两种不同的类型(对象列表,如此非类型化),我认为这是一个非常糟糕的主意。保持这样。你可以添加一个指示器,指示行是哪种类型,以便能够轻松地测试它
因此:
你不能。一个类有一组预定义的字段(更不用说
ExpandoObject
,它有一些编译器技巧)。这与你使用的匿名类型是一样的
您不能只隐藏或删除未填充的字段。如果您迭代实例并尝试检索item.C
,该字段为空并因此被删除,会怎么样?这通常会导致编译器错误。NET如何解决此问题
你唯一能做的另一件事是在你的列表中放入两种不同的类型(对象列表,如此非类型化),我认为这是一个非常糟糕的主意。保持这样。你可以添加一个指示器,指示行是哪种类型,以便能够轻松地测试它
因此:
你说的“那一栏的什么地方是空的”是什么意思?你说的“那一栏的什么地方是空的”是什么意思?