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

      

  • 相关阅读:
    Python变量、标识符
    PyCharm中设置作者信息
    去中心化
    复杂逻辑---取数
    行政机构处理
    2020.11案例分析
    中间表
    软考--项目管理名词
    软考--近6次上午考点分析
    软考--学习方法、做题方法
  • 原文地址:https://www.cnblogs.com/wpycs/p/8386528.html
Copyright © 2011-2022 走看看