2011-11-30 3 views
8

я пытаюсь сравнить Int со строкой в ​​соединении метода Linq лямбда, как это:LINQ лямбда - преобразование 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 к Entities не распознает метод 'Int32 ToInt32 (System.String)' метод, и этот метод не может быть переведен в выражение магазина.

Как это решить?

+3

Попробуйте использовать 'SqlFunctions.StringConvert ((двойной) afh.addressid)' вместо 'ToString();' – Reniuz

+0

@Poku LINQ к entiites не поддерживает каких-либо преобразований, как conert.Tostring() и преобразовывать .ToInt32, convert.ToDatetime .. –

+0

@Poku. Самое лучшее предложение - сначала извлечь записи из базы данных в список, а затем сделать преобразование и сравнение в этом списке. Затем он работает для вас ... –

ответ

3

Вы работаете с Linq в SQL? Linq пытается преобразовать ваш лямбда в sql-запрос. К сожалению, ToString не так легко поддерживается.

Перед тем, как присоединиться, вы можете материализовать свои таблицы с помощью ToArray(), но это может быть дорого.

Посмотрите на this article и this question.

+0

, как вы упомянули, это будет слишком дорого в моем случае :( – Poku

+0

Да, но посмотрите ссылки - они могут быть полезны :) –

+0

производительность на самом деле не так уж плохо с этим решением, поэтому я это сделаю. Благодаря! – 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() }); 
+0

это не сработает при компиляции. book.bookno = строка и afh.addressid = int. – 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"); 
+0

Привет, Дейв. Что вы здесь редактировали? Я снова сделал глупую ошибку: P –

Смежные вопросы