当前位置:  开发笔记 > 编程语言 > 正文

比较IPAddress(存储为varbinary)

如何解决《比较IPAddress(存储为varbinary)》经验,为你挑选了1个好方法。

我的活动表上有一个IPAddress列。它以varbinary(16)的形式存储,因此它不仅效率高(比作为字符串存储),而且还支持IPv6。当我存储时,我基本上得到了(new System.Net.IPAddress(“ 127.0.0.1”))。GetAddressBytes()的值。

我想要做的就是搜索以某些字节开头的所有IP地址,例如“ 127. *”。我可以很容易地得到字节,所以假设我能够得到新的byte [] {127}。

鉴于此,我如何实际编写LINQ to SQL查询以获取所需的数据?

可悲的是,我没有StartsWith,尽管我本质上想要的是Activity.Where(a => a.IPAddress.StartsWith(new byte [] {127}))。



1> ram..:

前一段时间,我不得不找到给定IP的位置。我们从请求中获得了IP。有免费的数据库为我们提供了这种映射。在IPv4中,当我们说IP为“ abcd”时,它实际上是……

a * (256^3) + b * (256^2) + c * (256) + d

http://www.aboutmyip.com/AboutMyXApp/IP2Integer.jsp

因此,当您说要以“ a”开头的IP地址时,您正在寻找的IP地址介于* 256 ^ 3和* 256 ^ 3 + 256 *(256 ^ 2)(b = 256)+ 256 *(256 )(c = 256)+ 256(d = 256)(下限/上限可能会有所不同,具体取决于您是否要包括/排除限制)。

也就是说,有为特定目的保留的特定IP(例如127.0.0.1是localhost,0.0.0.0不能是IP等)。

所以你的linq查询将是

from i in iList where i >= MIN && i <= MAX select i;

其中iList是您的初始列表MIN是您的范围的最小值MAX是您的范围的最大值

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有