zoukankan      html  css  js  c++  java
  • [EntityFramework]记录Linq中如何比较数据库中Timestamp列的方法(如大于0x00000000000007D1的记录)

    Timestamp对于EF实体的类型是byte[]
    class Program
        {
            static void Main(string[] args)
            {
                using (var context = new DbContext())
                {
                    var val = BitConverter.GetBytes(0x00000000000007D1).Reverse().ToArray();
                    var byteArr = Enumerable.Range(0, 8 - val.Length)
                        .Select(c => (byte)0)
                        .Concat(val).ToArray();
                    //使用扩展方法,查询大于0x00000000000007D1的记录
                    var query = context.TestTable
                        .Where(c => c.RowVersion.Compare(byteArr) > 0)
                        .ToList();
                }
            }
        }
        static class ArrayExtensions
        {
            public static int Compare(this byte[] b1, byte[] b2)
            {
                if (b1 == null && b2 == null)
                    return 0;
                else if (b1 == null)
                    return -1;
                else if (b2 == null)
                    return 1;
                return ((IStructuralComparable)b1).CompareTo(b2, Comparer<byte>.Default);
            }
        }
        public class TestTable
        {
            [Key]
            public int id { get; set; }
    
            [Timestamp]
            public byte[] RowVersion { get; set; }
        }

     生成的sql如下

    exec sp_executesql N'SELECT 
        [Extent1].[id] AS [id], 
        [Extent1].[RowVersion] AS [RowVersion]
        FROM [dbo].[TestTable] AS [Extent1]
        WHERE [Extent1].[RowVersion] > @p__linq__0',N'@p__linq__0 varbinary(8000)',@p__linq__0=0x00000000000007D1

      

  • 相关阅读:
    nodepad++中的正则表达式匹配和替换操作。
    QT Creator配置环境和安装
    圣诞树小程序的制作
    C#编辑xml文件
    delegate里的Invoke和BeginInvoke
    记录RFID操作错误
    关于Panel隐藏横向滚动条
    随笔
    Java图形打印 上下对称三角星
    Centos 7.5安装 Redis 5.0.0
  • 原文地址:https://www.cnblogs.com/wpycs/p/8386528.html
Copyright © 2011-2022 走看看