代码之家  ›  专栏  ›  技术社区  ›  regex

Linq Join on Between子句

  •  5
  • regex  · 技术社区  · 16 年前

    我在处理将基于邮政编码联接表的LINQ查询时遇到一些问题。我需要根据客户的邮政编码是否位于由zipbeg和zippend列确定的一系列邮政编码中加入表。

    T-SQL看起来像这样:

    JOIN [ZipCodeTable] [zips] 
        ON [customer].[zipcode] BETWEEN [zips].[ZIPBEG] AND [zips].[ZIPEND]
    
    -- or
    
    JOIN [ZipCodeTable] [zips] 
        ON [zips].[ZIPBEG] <= [customer].[zipcode] 
            AND [zips].[ZIPEND] >= [customer].[zipcode]
    
    1 回复  |  直到 16 年前
        1
  •  12
  •   casperOne    16 年前

    您不能在此条件下进行特殊联接,正式支持的唯一联接类型是基于等式的联接,而您在T-SQL中的条件不符合该等式。

    相反,您必须执行笛卡尔积,然后根据适当的条件进行过滤:

    from c in customers
    from z in zips
    where
      z.ZipBeg <= c.ZipCode && c.ZipCode <= z.ZipEnd
    select
      c