2010-06-04 3 views
3

Я использую Entity Framework от .NET 3.5Entity Framework выбирает одно значение из строки

У меня есть две таблицы с отношением от 0-1 до многих. Скажем, гражданин и город. У каждого гражданина есть столбец с внешним ключом (ID), который соединяет его с Сити.

Когда я выбираю одного гражданина, мне также нужно выбрать название города, в котором он живет. Потому что таблица города содержит тонны данных, которые на самом деле не связаны с гражданами, поэтому я не хочу извлекать их из базы данных, чтобы сэкономить некоторую пропускную способность.

В настоящее время я использую функцию Include(), но он захватывает все данные из Города, связанные с гражданами, в то время как мне нужно только имя.

Есть ли способ написать запрос для выбора отдельной ячейки из всей строки в EF и без создания новых классов или интерфейсов или репозиториев? Вот мой Включают:

  Citizen citizen = db.Citizens.Include("Cities").First(p => p.citizen_id == id); 
+0

Есть ли у вашей модели гражданина коллекция городов? –

+0

Зачем нужна коллекция, если у гражданина может быть 0 или только 1 город? – Alex

ответ

2

Вы можете сделать это путем проектирования, например,

var c = from c in db.Citizens 
     where c.citizen_id == id 
     select new 
     { 
      Name = c.Name, 
      CityName = c.City.Name 
     }; 

Вы также можете проектировать на POCOs.

Вы не сказать EF, чтобы получить объект типа Citizen с родственной City, но только с City.Name заполнены. EF не будет частично материализовать сущность. Используйте модели представления/презентации или DTO вместо объектов, когда вам нужно всего несколько полей.

+0

Спасибо, это то, что я искал. Есть ли способ получить имя города из var c сразу? Допустим, я не использую модели просмотра для этого? – Alex

+0

Вы имеете в виду «var cityName = c.First(). CityName;'? –

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