如何从表格中选择特定值介于两列值之间的一行或多行?
例如在SQL中:
SELECT * FROM MyTable WHERE '123ABC' BETWEEN MinValue AND MaxValue
我在LINQ中尝试了以下内容(使用LINQpad):
from d in MyTable
where d.MinValue.CompareTo("ABBBBC") >= 0 &&
d.MaxValue.CompareTo("ABBBBC") <= 0
select d
但它只给了我0个结果。如果我知道MinValue和MaxValue中的两个值并改为插入它们,例如:
from d in MyTable
where d.MinValue.CompareTo("AAAAAA") >= 0 &&
d.MaxValue.CompareTo("CCCCCC") <= 0
select d
然后它会给我数据库中与这些最小值和最大值相对应的所有行,但如果我尝试使用一个应该落在这两个值中的值,则不会出现任何内容。
答案 0 :(得分:1)
Gert Arnold是对的,你正在混淆比较运算符。
原始的LINQ表达式
from d in MyTable
where d.MinValue.CompareTo("ABBBBC") >= 0 &&
d.MaxValue.CompareTo("ABBBBC") <= 0
select d
生成以下SQL查询:
-- Region Parameters
DECLARE @p0 NVarChar(1000) = 'ABBBBC'
DECLARE @p1 NVarChar(1000) = 'ABBBBC'
-- EndRegion
SELECT [t0].[MinValue], [t0].[MaxValue]
FROM [MyTable] AS [t0]
WHERE ([t0].[MinValue] >= @p0) AND ([t0].[MaxValue] <= @p1)
whis相当于
SELECT * FROM MyTable WHERE 'ABBBBC' BETWEEN MaxValue AND MinValue
显然是不正确的。将查询更改为
from d in MyTable
where d.MinValue.CompareTo("ABBBBC") <= 0 &&
d.MaxValue.CompareTo("ABBBBC") >= 0
select d
应该产生所需的结果。如果您仍然认为它不正确,请提供您认为应该由查询返回的数据行和您的过滤值。