读取byte []或使用Linq到实体浮动 - c#

我有表,一列为二进制,另一列为浮点。我需要使用SQL选择以下内容

SELECT ISNULL(myBinary, myFloat) FROM table

那行得通,我得到一列所有二进制文件

0x3F800000
0xE5C13DBAB611123B47A7
0x9946C3BA9946C3BA9946
0xDE0E1D3C8B7A143C6DB7
0x3F800000

等等

现在,我想使用Linq to Entities进行此查询,但是我只是找不到可以编译的代码

context.table.select(s => new MyObject()
  { 
     Result = s.myBinary ?? s.myFloat // <--- '??' operator cannot be applied to operands of type 'byte[]' and 'float'
  });

 class MyObject { public Object Result {get; set;} }

我如何获得这些价值? BitConverter也不起作用(在浮动状态)

更新

为什么要问:所以如果我分别选择两个列,我会得到更多的执行时间

set statistics time on
SELECT TOP (5000) ISNULL([x], [y])
  FROM [table];
set statistics time off
set statistics time on
SELECT TOP (5000) [x], [y]
  FROM [table];
  set statistics time off

收益(即使多次执行,也总是相同的)

(5000 rows affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 7 ms.

(5000 rows affected)

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 113 ms.

注意:在一个评论中,我写了系数40,这是另一种测量方法。统计时间产生的因子约为10。

如果增加行数,我得到

(50000 rows affected)

 SQL Server Execution Times:
   CPU time = 47 ms,  elapsed time = 820 ms. (with ISNULL)

(50000 rows affected)

 SQL Server Execution Times:
   CPU time = 16 ms,  elapsed time = 1365 ms.

行数较少(约1000或更少)的执行时间无法同等地测量,因此约为1 ms。但是:我希望每个查询大约能容纳5000到10000行。

参考方案

作为解决方案,我可以提供一个自定义存储函数,该函数映射到内置的ISNULL SQL函数。

如果使用的是Code First模型,则需要
EntityFramework.Functions软件包。

但是,由于您使用的是edmx,因此过程稍微复杂一些,需要手动编辑edmx文件。 How to: Define Custom Functions in the Storage Model MSDN主题部分涵盖了该技术。

使用XML(文本)编辑器打开edmx文件。找到Schema元素的edmx:StorageModels子元素,并在其中添加以下内容:

<Function Name="IsNull" BuiltIn="true" IsComposable="true" ReturnType="binary">
  <Parameter Name="expr1" Type="binary" />
  <Parameter Name="expr2" Type="float" />
</Function>

请注意,如MSDN链接中所述:

如果使用更新模型向导更新模型,则按照以下过程中的建议对.edmx文件的SSDL部分所做的更改将被覆盖。

因此,如果从数据库更新edmx,请确保将其保存在安全的地方并重新包含它。

然后在某个静态类中添加一个方法,并使用DbFunction属性对其进行修饰:

public static class CustomDbFunctions
{
    const string Namespace = "EFTest.MyDbContextModel.Store";

    [DbFunction(Namespace, "IsNull")]
    public static byte[] IsNull(byte[] expr1, double expr2) => throw new NotSupportedException();
}

(更新Namespace字符串以匹配Namespace元素的<edmx:StorageModels><Schema>属性的值)。

就这样。现在,您应该可以在LINQ to Entities查询中使用以上功能:

class MyObject { public byte[] Result { get; set;} }

context.MyTable.Select(e => new MyObject
{ 
    Result = CustomDbFunctions.IsNull(e.myBinary, e.myFloat)
});

并且EF6会很乐意将其转换为所需的SQL ISNULL函数。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

Json到php,json_decode返回NULL - php

我正在用PHP进行JSON解析器的一些API,用于存储有关遗产的信息。我在解析时遇到问题,因为它返回的是NULL值而不是数组或对象。简单的JSON代码可以很好地解析,但是可以这样:{"success":true,"totalCount":1,"data":[{"id":99694…

这个json格式正确吗? - c#

我尝试解析时有json数据,返回错误的语法错误,请帮助我发现语法错误。[{"isData":"Yes","Details":"[{"Id":"70","Name":"Test","FileName&#…