繁体   English   中英

Linq to entity:加入string和int而不进行转换

[英]Linq to entity: join string and int without conversion

我有2个表:一个表有一个nvarchar列,其格式如下:“Type | Id(或GUID)”。 如果列的类型是“Table2”而第二部分是整数,那么table是具有在第一个表中引用的主键。

所以我加入这些表的第一次尝试是:

    var query = from t1 in db.Table1
            join t2 in db.Table2
                on t1.TypeAndId equals "Table1|" + t2.Id
            select t2;

然而,这需要永远执行。 在profiler中检查查询,它会生成如下内容:

    SELECT 
            [Extent2].[Id] AS [Id]
            FROM  [dbo].[Table1] AS [Extent1]
            INNER JOIN [dbo].[Table2] AS [Extent2] ON [Extent1].[TypeAndId] = (N'Type|' +  CAST( [Extent2].[Id] AS nvarchar(max)))
            WHERE [Extent1].[Id] = @p__linq__0

我们的DBA建议如下:

    SELECT
           [Extent2].[Id] AS [Id]
           FROM  [dbo].[Table1] AS [Extent1]
           INNER JOIN [dbo].[Table2] AS [Extent2] ON replace([Extent1].[TypeAndId],'Type|','') =  [Extent2].[Id]
           WHERE [Extent1].[Id] = 519

所以看起来很明显的解决方案是:

    var query = from t1 in db.Table1
            join t2 in db.Table2
                on t1.TypeAndId.Replace("Table1|", "") equals t2.Id
            select t2;

但是,由于一列是nvarchar,因此无法编译,其他是int。 所以我想知道我如何能够生成一个可以生成DBA建议的查询的连接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM