2009-11-13 2 views

ответ

4

В основном LINQ to SQL не знает, что сделает этот конструктор - он хочет попытаться преобразовать его в SQL-запрос, но не знает, как это сделать. Нужно ли вам после этого добавлять дополнительные биты в запрос? Если нет, то вы могли бы сделать:

public IEnumerable<ISite> GetSites() 
{ 
    return Db.Sites.Select(x => new { x.id, x.name }) // Project in SQL 
        .AsEnumerable() // Do the rest in process 
        .Select(x => new cms.bo.Site(x.id, x.name)) 
        .Cast<ISite>(); // Workaround for lack of covariance 
} 

EDIT: Я пропустил аспект дисперсии, и был предполагая, что запрос был неудачу во время выполнения. Это, безусловно, стоит попробовать только вызов Cast<ISite>() как в ответ tvanfosson - но если это не сработает, попробуйте выше :)

+0

Великий ответ снова Джон! – Matias

+0

@ Джон, я это не будет работать из-за общего типа ковариации: '' IEnumerable к '' IEnumerable

+0

Не возвращающие IQyueryable , не является IQueryable ? – tvanfosson

3

Попробуйте это:

return Db.Sites 
      .ToList() 
      .Select(s => new cms.bo.Site(s.id, s.name)) 
      .Cast<ISite>() 
      .AsQueryable(); 
+0

Я не думаю, что вам нужен звонок в AsQueryable, не так ли? –

+0

У меня нет доступа к VS прямо сейчас, поэтому я не могу проверить, но я думаю, что он захочет вернуть его как IEnumerable вместо IQueryable . Это, вероятно, хорошо, хотя, поскольку запрос должен быть реализован для создания класса сайта, но он изменит тип возвращаемого метода. – tvanfosson

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

  • Нет связанных вопросов^_^