Возврат данных на основе списка <T>из двух или более таблиц в SQL Server - PullRequest
1 голос
/ 04 января 2012

На сервере sql у меня есть две таблицы (скажем, Person и School).Я хочу вернуть Person.Name из одной таблицы и School.Name (поскольку они связаны, я также хочу получить первичный ключ Person).

Итак, вопрос в том, можно ли вернуть эти данные и сделать ихвсе в списке?также для возвращаемого типа запрашивает ли я создание для него пользовательского типа (я имею в виду класс)?

Редактировать: Извините, я забыл упомянуть, что он мне нужен в LINQ.

Ответы [ 3 ]

2 голосов
/ 04 января 2012

Может быть, есть лучший способ сделать это, но я бы создал новый класс и возвратил список этих объектов.Например:

Сначала выполните запрос LiNQ, чтобы получить нужные нам значения:

var personWithSchoolName = select p from db.Person
                           select s from db.School
                           where p.SchoolId == s.SchoolId
                           select new { p.PersonId as PersonId, p.Name as PersonName, s.Name as SchoolName };

peopleWithSchoolNamesList = personWithSchoolName.ToList();

Затем выполните цикл по результатам и добавьте их в новый список:

foreach(object o in peopleWithSchoolNamesList)
{
    PersonWithSchoolNameObject personWithSchoolNameObject = new PersonWithSchoolNameObject(o.PersonId, o.PersonName, o.SchoolName);

    ListWithPeople.Add(PersonWithSchoolNameObject);
}

return ListWithPeople;
0 голосов
/ 04 января 2012

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

SELECT Person.Id, Person.Name, School.Name AS SchoolName
from Person
LEFT JOIN School ON Person.SchoolId = School.Id

(на самом деле вы должны использовать хорошо подготовленный linq, чтобы вернуть это, да?)

и обернуть результаты в специальный предопределенный класс, например:

class PersonWithSchool
{
  public int PersonId;
  public string PersonName;
  public string SchoolName;
}
0 голосов
/ 04 января 2012

Вы можете использовать Присоединение операции LINQ для объединения данных из более чем одной таблицы

Для возврата вам понадобится класс Concrete. Вы не можете напрямую вернуть результаты запроса LINQ, то есть анонимного типа.

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