Как связать запрос linq-to-entity, содержащий соединение с доступным для записи сетевым представлением - PullRequest
0 голосов
/ 06 января 2011

Этот вопрос, хотя похож на другие , похоже, не является дубликатом.Если это так, пожалуйста, уточните, и я буду счастлив объединить.

Я хочу связать с доступным для записи DataGridView, используя запрос linq-to-entity, содержащий соединение.Модель выглядит следующим образом:

alt text

Денормализованный DataGridView должен быть связан следующим образом:

alt text

Следующий код связывает, ноприводит к доступу только для чтения DataGridView, потому что запрос linq-to-entity возвращает анонимный тип ( см. этот пост ).Я зашел в тупик, потому что думаю, что для денормализации мне нужен анонимный тип.

var query = from t in iDictionaryContext.DisplayTexts
        from l in iDictionaryContext.Languages
        where
            t.LanguageID == l.LanguageID
        select new
         {
             Key = t.DisplayKey,
             Text = t.DisplayText1,
             Language = l.LanguageName
         };

Я также попробовал решение, предложенное здесь , но, похоже, оно применимо к linq-to-sql, но не для linq-to-entity.При настройке bindingsource.datasource для запроса linq-to-entity выдается исключение: «В LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров».

Спасибо за совет,

Тим

1 Ответ

1 голос
/ 08 января 2011

Просто определите тип презентации следующим образом. Вам не нужно передавать объекты в конструктор:

public class LanguageDisplayTextPresentation 
{
    public int Key { get; set; }
    public string Text { get; set; }
    public string Language { get; set; }
}

, а затем

var query = from t in iDictionaryContext.DisplayTexts
    from l in iDictionaryContext.Languages
    where
        t.LanguageID == l.LanguageID
    select new LanguageDisplayTextPresentation 
    {
        Key = t.DisplayKey,
        Text = t.DisplayText1,
        Language = l.LanguageName
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...