"无法将类型'bool []'隐式转换为'object []'"

jfa*_*mvg 0 c# linq

我有一个LINQ查询来从我的数据库中获取数据:

query.Select(b => b.BooleanValue.Value).Distinct().ToArray(); 
Run Code Online (Sandbox Code Playgroud)

这个查询给了我错误

Linq不能隐式地将类型'bool []'转换为'object []'.

我得到相同的错误与十进制值但具有文本值它一切正常.我找遍了所有在互联网上,我只找到那些有问题的人object来bool.

你知道如何(内LINQ转换select)decimal到object?

Eri*_*ert 9

您有一个LINQ-to-Entities查询,您希望在服务器上执行该查询,并将结果作为对象数组返回.服务器上的查询提供了一系列值类型的不同值.

所以我们要做的是尽可能多地在服务器上执行查询,然后将结果转换为客户端上的普通序列,然后在客户端上打包值.所以:

object[] results = query
  .Select(b => b.BooleanValue.Value) // on the server
  .Distinct() // on the server
  .AsEnumerable() // now we're on the client
  .Cast<object>() // box each value to object on the client
  .ToArray(); // put the results into an array of objects on the client
Run Code Online (Sandbox Code Playgroud)

完成.


Ste*_*ger 5

query
  .Select(b => b.BooleanValue.Value)
  .Distinct()
  .Cast<object>()
  .ToArray();
Run Code Online (Sandbox Code Playgroud)

你可能需要这样做:

query
  .Select(b => b.BooleanValue.Value)
  .Distinct()
  // execute query
  .AsEnumerable()
  // cast in memory
  .Cast<object>()
  .ToArray();
Run Code Online (Sandbox Code Playgroud)

只有引用类型的数组是共变体.这是一个有争议的特点.

  • 为了澄清你的最后一点,有争议的一点是该特征存在,而不仅仅存在于参考类型.(实际上,值类型数组有一些协方差; CLR将允许`int []`到`uint []`转换成功.) (2认同)