Получение определенных столбцов в Entity Framework - PullRequest
3 голосов
/ 28 ноября 2011

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

bksb_Users - это имя таблицы в моей базе данных, а также имя объекта в Entity Model.

public List<bksb_Users> SearchStudents(string reference, string firstname, string lastname)
        {
            return (from u in context.bksb_Users
                    where u.userName.Contains(reference)
                    && u.FirstName.Contains(firstname)
                    && u.LastName.Contains(lastname)
                    orderby u.FirstName, u.LastName
                    select new bksb_Users
                     {
                         user_id = u.user_id,
                         userName = u.userName,
                         FirstName = u.FirstName,
                         LastName = u.LastName,
                         DOB = u.DOB
                     }).Take(100).ToList<bksb_Users>();
        }

Ошибка ...

The entity or complex type 'bksbModel.bksb_Users' cannot be constructed in a LINQ to Entities query.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Работает ли ниже?

public List<bksb_Users> SearchStudents(string reference, string firstname, string lastname) 
    { 
        var anon = (from u in context.bksb_Users 
                where u.userName.Contains(reference) 
                && u.FirstName.Contains(firstname) 
                && u.LastName.Contains(lastname) 
                orderby u.FirstName, u.LastName 
                select new 
                 { 
                     user_id = u.user_id, 
                     userName = u.userName, 
                     FirstName = u.FirstName, 
                     LastName = u.LastName, 
                     DOB = u.DOB 
                 }).Take(100).ToList(); 

        return anon.Select(z => new bksb_Users()
        {
            user_id = z.user_id, userName = z.userName, FirstName = z.FirstName, DOB = z.DOB
        }).ToList();
    } 

Все, что я сделал, это разделил задачу на два шага:

  1. Получите данные (в анонимный тип), используя LINQ дляEntities.
  2. Преобразуйте анонимный тип в нужный тип, используя LINQ to Objects.

Обратите внимание, что лучшим вариантом будет создание нового типа (класса), который содержит только поля /свойства, которые вам нужны - это устранит необходимость в шаге 2 и прояснит для тех, кто вызывает вашу функцию, какие столбцы «заполнены», а какие нет.Это также означает, что у вас меньше шансов «случайно» попытаться сохранить эти наполовину заполненные сущности обратно в базу данных.

0 голосов
/ 28 ноября 2011

по какой-то причине я запрашиваю, что поле DOB выглядит примерно так

public object DOB { get { return fieldX + fieldY } }

Entity Framework не понимает этого. Все поля в запросе должны быть сопоставлены с определенными столбцами в БД

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