我有表,一列为二进制,另一列为浮点。我需要使用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
函数。
我正在使用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…