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

在LINQ中进行字符串比较的问题

如何解决《在LINQ中进行字符串比较的问题》经验,为你挑选了1个好方法。

我无法让LINQ将某些内容翻译成我需要的查询.在T-SQL中,我们对作为CHAR(6)列的三列进行<=和> =比较.LINQ不允许我这样做

运算符'<='不能应用于'string'类型的操作数为'string'.

我有以下T-SQL查询..

SELECT * 
FROM [ZIPMASTER] zm
WHERE zm.CORP = 12 
AND '85546 ' BETWEEN zm.ZIPBEG AND zm.ZIPEND

以上不是LINQ友好,因为没有支持BETWEEN.因此,我简化为以下内容:

SELECT *
FROM [ZIPMASTER] zm
WHERE zm.CORP = 12
AND zm.ZIPBEG <= '85546 '
AND zm.ZIPEND >= '85546 '

我曾经用它来创建以下LINQ查询:

var zipLinqQuery =
    from z in db.ZIPMASTERs
    where z.CORP == 12
    && z.ZIPBEG <= "85546 "
    && z.ZIPEND >= "85546 "
    select z;
List zips = zipLinqQuery.ToList();

C# - LINQ不太喜欢这个查询.我尝试转换为整数然后进行比较,但在某些情况下,邮政编码可能包含一个字母.例如,以下表达式将在T-SQL中评估为true:

WHERE '85546B' BETWEEN '85546A' AND '85546D'

我不知道为什么它在T-SQL中有效,但我的猜测是它通过将数组转换为数字ASCII值来单独比较数组中的每个字符.

无论如何,非常感谢您提供的任何帮助.提前致谢.

CJAM

解决方案(由Jon Skeet发布):

似乎string.CompareTo()确实生成了所需的T-SQL.以下示例:

var zipLinqQuery =
    from z in db.ZIPMASTERs
    where z.CORP == listItem.CORP
    && z.ZIPBEG.CompareTo(listItem.ZIPCODE) <= 0
    && z.ZIPEND.CompareTo(listItem.ZIPCODE) >= 0
    select z;

生成以下T-SQL:

DECLARE @p0 INT, @p1 CHAR(6), @p2 CHAR(6)
SET @p0 = 12
SET @p1 = '85546 '
SET @p2 = '85546 '

SELECT [t0].[CORP], [t0].[ZIPEND], [t0].[ZIPBEG], [t0].[CITY], [t0].[STATE], [t0].[CYCLE]
FROM [dbo].[ZIPMASTER] AS [t0]
WHERE ([t0].[CORP] = @p0) AND ([t0].[ZIPBEG] <= @p1) AND ([t0].[ZIPEND] >= @p2)

Jon Skeet.. 39

尝试:

var zipLinqQuery =
    from z in db.ZIPMASTERs
    where z.CORP == 12
    && z.ZIPBEG.CompareTo("85546 ") <= 0
    && z.ZIPEND.CompareTo("85546 ") >= 0
    select z;

我不知道 String.CompareTo在LINQ to SQL中工作,但它是第一个尝试的东西.

(通常你应该使用StringComparer来指定正确的比较类型,但我怀疑在这种情况下CompareTo是更好的选择.)



1> Jon Skeet..:

尝试:

var zipLinqQuery =
    from z in db.ZIPMASTERs
    where z.CORP == 12
    && z.ZIPBEG.CompareTo("85546 ") <= 0
    && z.ZIPEND.CompareTo("85546 ") >= 0
    select z;

我不知道 String.CompareTo在LINQ to SQL中工作,但它是第一个尝试的东西.

(通常你应该使用StringComparer来指定正确的比较类型,但我怀疑在这种情况下CompareTo是更好的选择.)

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