Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以删除select查询中的列_C#_Linq - Fatal编程技术网

C# 是否可以删除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

如问题所示,我想从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 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如何解决此问题

你唯一能做的另一件事是在你的列表中放入两种不同的类型(对象列表,如此非类型化),我认为这是一个非常糟糕的主意。保持这样。你可以添加一个指示器,指示行是哪种类型,以便能够轻松地测试它

因此:

你说的“那一栏的什么地方是空的”是什么意思?你说的“那一栏的什么地方是空的”是什么意思?