我有一个应用程序,我将其保存在数据库中:
FromLetter ToLetter
AAA AAZ
ABC MNL
我需要的是像这个AAC一样搜索并返回记录1和FBC并返回记录2。 是否相同的功能,而不是字母我保存日期。我需要做同样的查询。
我正在使用SQL Server和Entity Framework,任何想法如何做到这一点?
答案 0 :(得分:1)
我认为使用整数表示FromLetter
和ToLetter
属性要容易得多。特别是如果字符串的长度总是只有3 - 你可以简单地将数字编码为:
(((letter1 - 'A') * 26 + (letter2 - 'A')) * 26) + (letter3 - 'A')
这将为您提供0到26 ^ 3之间的数字,表示三重奏,并且可以轻松转换回字符串(在数字基数之间转换数字时使用模数和除法)。这个数字很容易适合Int32
(最多6个字母)。
搜索指定范围内的字符串将是对数字范围内的整数的简单搜索(这很容易做到且效率很高)。
答案 1 :(得分:1)
应该很直接。这是一个Linq to Entities解决方案,忽略大小写:
实体框架/ Linq解决方案字符串:
string yourValue = somevalue;
var result = (from r in db.ExampleTable
where String.Compare(yourValue, r.FromLetter, true) == 1
&& String.Compare(yourValue, r.ToLetter, true) == -1
select r).First();
日期:
DateTime yourValue = somevalue;
var result = (from r in db.ExampleTable
where yourValue >= r.FromDate
&& yourValue <= r.ToDate
select r).First();
答案 2 :(得分:0)
天才解决方案.... bunglestink
我浪费了大量时间研究EF中字符串的“between”子句的实现。这很有帮助。