C# LINQ lambda-将int转换为字符串

C# LINQ lambda-将int转换为字符串,c#,.net,linq,exception-handling,C#,.net,Linq,Exception Handling,我试图在linq lambda的连接方法中将int与字符串进行比较,如下所示: database.booking.Join(database.address, book => book.bookno, afh => afh.addressid.ToString(), (book, afh) => new { booking = book, add

我试图在linq lambda的连接方法中将int与字符串进行比较,如下所示:

database.booking.Join(database.address,
                      book => book.bookno,
                      afh => afh.addressid.ToString(),
                       (book, afh) => new { booking = book, add = afh })
                .Where(book => book.address.name == "test");
但是我在ToString()上遇到了一个错误:

System.NotSupportedException:LINQ to Entities无法识别方法“Int32到Int32(System.String)”方法,并且无法将此方法转换为存储表达式


如何解决此问题?

您是否正在使用Linq to SQL?Linq正在尝试将lambda转换为sql查询。不幸的是,
ToString
并不是那么容易支持的

您可以在加入之前使用
ToArray()
具体化表,但这可能会很昂贵

看看并试试这个:

var bookinger = database.booking.Join(database.address,
                         book => book.bookno,
                         afh => afh.addressid,
                         (book, afh) =>
                         new { booking = book, add = afh })
                     .Where(book => book.address.name == "test")
                     .Select(new { booking, add = add.ToString() });
你试过这个吗

var bookinger = 
    database.booking.Join(database.address,
        book => book.bookno,
        afh => Convert.ToString(afh.addressid),
        (book, afh) =>
        new { booking = book, add = afh })
    .Where(book => book.address.name == "test");

尝试使用
SqlFunctions.StringConvert((double)afh.addressid)
代替
ToString()
@Poku linq to entiite不支持任何转换,如conert.Tostring()和convert.ToInt32,convert.ToDatetime..@Poku我最好的建议是首先将数据库中的记录检索到列表中,然后对该列表进行转换和比较..然后它对您有效..但是当我无法进行比较时,我如何加入数据?这在编译时会失败。book.bookno=string和afh.addressid=int。正如您提到的,在我的例子中,这可能太贵了:(是的,但是看看链接——它们可能会有帮助:)这个解决方案的性能实际上并没有那么差,所以我将对此进行讨论。谢谢嗨,戴夫。你在这里编辑了什么?我又犯了什么愚蠢的错误吗