LINQ Lambda - 将整数转换为字符串

8

我将尝试在 Linq Lambda 的 Join 方法中比较一个整数和一个字符串,如下所示:

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 ToInt32(System.String)' 方法,而且此方法无法转换成存储表达式。

我该如何解决这个问题?


3
请尝试使用 SqlFunctions.StringConvert((double)afh.addressid) 替代 ToString() - Renatas M.
@Poku,linq-to-entities 不支持任何像 convert.ToString()、convert.ToInt32 和 convert.ToDateTime 这样的转换。 - Glory Raj
@Poku 我最好的建议是先将记录从数据库检索到列表中,然后在该列表上进行转换和比较..这样就可以为您工作了... - Glory Raj
但是如果我无法进行比较,那么我该如何连接这些数据呢? - Poku
3个回答

3
你是否在使用 Linq to SQL?Linq 尝试将你的 lambda 表达式转换为 SQL 查询。遗憾的是,ToString 并不容易被支持。
在 join 之前,你可以通过 ToArray() 让你的表格具体化,但这可能会很昂贵。
请看这篇文章这个问题

正如你所提到的,这对我来说太昂贵了 :( - Poku
是的,但看一下链接 - 它们可能会有所帮助 :) - Piotr Zierhoffer
这个解决方案的性能其实还不错,所以我会采用它。谢谢! - Poku

2

试试这个:

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() });

这段代码在编译时会失败。book.bookno是字符串类型,而afh.addressid是整型。 - Poku

1

你试过这个吗?

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");

嗨,戴夫。你在这里编辑了什么?我又犯了什么傻瓜错误吗 :P - Azhar Khorasany

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接