Linq:如何在不同类型的键上连接表

时间:2015-01-23 09:25:41

标签: c# mysql linq entity-framework

我需要编写一个LINQ查询,将两个表t1和t2连接到不同类型的键上。 表t2的密钥(KeyB)是字符串,表t1的密钥(KeyA)很长。

我正在尝试以下方法,但它提供了一个例外:

  

Method' System.String StringConvert(System.Nullable`1 [System.Double])'   没有受支持的SQL翻译

...
join t2 in table2 on SqlFunctions.StringConvert((double)t1.KeyA).Trim() equals t2.KeyB

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我只想扩展其中一个模型。 t1t2类,并添加一个将KeyA值作为string返回的新属性:

partial class t1 
{
    public string KeyAString { get { return KeyA.ToString().Trim(); } }
}

或其他方式,KeyB值为long

partial class t2
{
    public long KeyBLong { get { return long.Parse(KeyB); } }
}

这样查询看起来很简单 并且不需要额外的转换:

join t2 in table2 on t1.KeyAString equals t2.KeyB

join t2 in table2 on t1.KeyA equals t2.KeyBLong

答案 1 :(得分:0)

使用 Convert.ToString(您的长值),它将转换为SQL JOIN子句。

Table1.Join(Table2, x => Convert.ToString(x.KeyA),  y =>  y.KeyB,
                    (x, y) => new { x,y })
                .ToList()