- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试执行的查询与此类似:
var checksum = from i in db.Items
where i.Id == id
select SqlFunctions.Checksum("*");
但是,这会返回字符串 "*"
的校验和值,而不是评估通配符。有没有办法计算所有列的校验和?
更新:
var checksum = db.Database.SqlQuery<int?>("SELECT CHECKSUM(*) FROM [Catalog].[Item] WHERE Id = @p0", id);
这给了我想要的结果,但看起来很脏。有没有办法在没有内联 SQL 的情况下执行此操作?
最佳答案
这可以通过 SqlFunctions 来完成类(class)。此类允许 linq-to-entities 代码包含可轻松转换为 Sql 的方法。
首先在您当前的编辑中:使用内联 SQL 不是“脏”的,并且在大多数(如果不是全部)情况下完全没问题。 ORM 并不能提供一切,尤其是在不存在良好的对象-列映射的情况下。但是,由于您使用的是 Entity Framework ,因此您可能会被 SqlFunctions
所困扰。静态方法。
在这种情况下,有很多用于执行校验和的重载,但是它们必须都是同一类型。由于您没有发布您的列的类型或列数,我不想在示例中推荐错误的重载供您使用。
以下是您的选择:
SqlFunctions.Checksum()
:
bool?
char[]
DateTime?
DateTimeOffset?
Decimal?
double?
Guid?
TimeSpan?
String
以上所有都有重载以允许最多 3 个参数(相同类型)。
SqlFunctions.AggregateChecksum()
:
IEnumerable<int>
IEnumerable<int?>
如果查看这些函数的文档,您会发现传递的参数是 VALUES,而不是列名。所以你应该在 Select()
中使用它们条款。这就是为什么当你通过 "*"
对于它对包含单个星号而不是所有列的字符串进行校验和的操作。另外请记住,不能直接调用这些函数,只能在 Linq-To-Entities 查询中使用。
假设名为“ItemName”和“Description”的列都是字符串,并且您还需要您的 ID,即 int
:
var checksum = db.Items.Where(i => i.Id == id)
.Select(i => SqlFunctions.Checksum(i.Id.ToString(), i.ItemName, i.Description));
不幸的是,正如您在上面的示例中看到的,我们不得不将 int 转换为字符串。没有重载允许使用不同类型的参数来计算校验和,也没有任何选项允许在校验和函数中使用超过 3 个参数;但是,正如我上面提到的,有时您需要执行内联 SQL 命令,这没关系。
关于c# - 如何使用 LINQ 和 Entity Framework 计算一行中所有列的校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547542/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!