Невозможно объединить LINQ Join с другими таблицами - PullRequest
0 голосов
/ 08 января 2011

Основная проблема заключается в том, что я получаю следующее сообщение:

"base {System.SystemException} = {" Невозможно создать постоянное значение типа 'BokButik1.Models.Book-Author'.В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid). "}"

на основе этого кода LinQ:

IBookRepository myIBookRepository = new BookRepository();
вар allBooks = myIBookRepository.HamtaAllaBocker (); * +1009 *

IBok_ForfattareRepository myIBok_ForfattareRepository = новый Bok_ForfattareRepository ();
вар-книги Авторы = myIBok_ForfattareRepository.HamtaAllaBok_ForfattareNummer ();

варq =
из booknn во всех книгах
присоединиться к Book-Authornn в книге авторов на booknn.BookID равно Book-Authornn.BookID
выбрать новый {booknn.title, Book-AuthorID};

Как мне решить эту проблему, чтобы получить экземпляр класса с заголовком свойства и Book-AuthorID?

// Fullmetalboy

Я также пыталсясоздание фиктивной связи с использованием отношения «allbooks» с примерами кода по адресу http://www.hookedonlinq.com/JoinOperator.ashx. К сожалению, все еще та же проблема.

Я также учел to Int32 из-за структуры сущностей http://msdn.microsoft.com/en-us/library/bb896317.aspx. К сожалению, все та же проблема.

Использование базы данных с 3 таблицами, и одна из них имеет отношение многие ко многим.Эта база данных используется в связи с структурой сущностей

Book-Author

Book-Author (int)
BookID (int)
Forfattare (int)

Книга

BookID (int)
название (строка)
и т. Д. И т. Д.

1 Ответ

0 голосов
/ 11 января 2011

Похоже, что вы используете два отдельных репозитория linq-to-sql для объединения. Это не сработает. Объединения могут работать только между таблицами, определенными в одном репозитории.

Однако, если вы с радостью перенесете все данные в память, ваш код будет очень легко заставить работать. Попробуйте это:

var myIBookRepository = new BookRepository();
var myIBok_ForfattareRepository = new Bok_ForfattareRepository();

var allBooks =
    myIBookRepository.HamtaAllaBocker().ToArray();

var Book_Authors =
    myIBok_ForfattareRepository.HamtaAllaBok_ForfattareNummer().ToArray();

var q =
    from booknn in allBooks
    join Book_Authornn in Book_Authors
        on booknn.BookID equals Book_Authornn.BookID
    select new { booknn.title, Book_AuthorID = Book_Authornn.Book_Author };

Обратите внимание на включение двух .ToArray() вызовов.

Мне пришлось исправить некоторые из имен переменных, и я немного догадался о том, как получить идентификатор автора.

Это работает для вас?

Я бы предложил иметь только один репозиторий и разрешить нормальное объединение - загрузка всех объектов в память может быть дорогой.

Если вы создаете пользовательские репозитории, вы также можете создать пользовательский метод, который возвращает заголовок и идентификаторы авторов как определенный класс, а не как анонимный класс. Делает для лучшей тестируемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...