【问题标题】:LINQ lambda - convert int to stringLINQ lambda - 将 int 转换为字符串
【发布时间】:2012-01-09 16:11:54
【问题描述】:

我正在尝试将 int 与 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)”方法,并且该方法无法转换为存储表达式。

我该如何解决?

【问题讨论】:

  • 尝试使用SqlFunctions.StringConvert((double)afh.addressid) 而不是ToString();
  • @Poku linq-to-entiites 不支持任何转换,例如 conert.Tostring() 和 convert.ToInt32 , convert.ToDatetime..
  • @Poku 我最好的建议是首先将数据库中的记录检索到列表中,然后在该列表上进行转换和比较..然后它对你有用...
  • 但是当我无法进行比较时,我将如何加入数据?

标签: c# .net linq exception-handling


【解决方案1】:

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

您可以在加入之前使用ToArray() 实现您的表,但这可能会很昂贵。

看看this articlethis question

【讨论】:

  • 正如你所说,这对我来说太贵了:(
  • 是的,但请查看链接 - 它们可能会有所帮助:)
  • 这个解决方案的性能实际上并没有那么糟糕,所以我会这样做。谢谢!
【解决方案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 = string 和 afh.addressid = int.
【解决方案3】:

你试过了吗?

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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多