Ef CTP5: справка по запросам Linq - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь загрузить пользовательский объект, используя linq из контекста данных объекта.Вот мой код

from category in _db.GetQueryable<DataModels.Category>()
 select new Category
 {
   Id = category.Id,
   Name = category.Name,
   CreatedBy = category.CreatedBy.HasValue ? new Login { Id = category.CreatedBy ?? Guid.Empty } : null
 }

//Note: GetQueryable<DataModels.Category> actually use Set<DataModels.Category>() in DataContext class.

Но он генерирует следующую ошибку:

Unable to create a constant value of type 'CodeOnly.EF.DomainModels.Login'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

Но приведенный выше код всегда работает, если я использую Linq2Sql.

Любая идея, как я могу достичьэто только в сценарии с кодом EF5.

1 Ответ

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

Вероятно, вам просто нужно получить данные Category из базы данных, прежде чем вы начнете проецировать их на пользовательские типы.

Получите только то, что вам нужно, но затем вызовите ToList() для вашей коллекции, чтобы выполнить ее и вывести из базы данных. Тогда вы сможете свободно проецировать изображение любого типа.

var items = _db.GetQueryable<DataModels.Category>().ToList();
from category in items
select new Category  
{    
    Id = category.Id,
    Name = category.Name,
    CreatedBy = category.CreatedBy.HasValue 
        ? new Login { Id = category.CreatedBy ?? Guid.Empty } : null
}

edit : по мере появления новой информации появляются новые идеи - попробуйте эту:

partial class Category
{
    public Category(int id, string name, Guid? createdByGuid)
    {
        Id = id;
        Name = name;
        CreatedBy = createdByGuid.HasValue ? new Login { Id = createdByGuid.Value } : null;
    }
}

var items = _db.GetQueryable<DataModels.Category>().ToList();
from category in items
select new Category(category.Id, category.Name, category.CreatedBy)

Мне также интересно, почему в своем первоначальном вопросе вы проверяете Guid? дважды для нуля (HasValue и ??) - однако я не думаю, что именно это вызывает у вас проблемы.

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