从SQL Server中的两个或多个表中返回基于List <t>的数据</t>

时间:2012-01-04 08:40:09

标签: c# sql-server wcf linq-to-sql

在sql server中,我有两个表(比如Person和School)。我想从一个表和School.Name返回Person.Name(因为它们是相关的,我也想要Person的主键)。

所以这里的问题是我可以返回这些数据并将它们全部列入清单吗?对于返回类型,它是否要求我为它创建一个自定义类型(我的意思是类)?

编辑:抱歉,我忘了在LINQ中需要它。

谢谢,

3 个答案:

答案 0 :(得分:2)

也许有更好的方法可以做到这一点,但我会创建一个新类并返回这些对象的列表。像这样:

首先进行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;

答案 1 :(得分:0)

您可以使用LINQ的Join操作来组合来自多个表的数据

出于返回目的,您将需要一个Concrete类。您不能直接返回LINQ查询的结果,即匿名类型。

答案 2 :(得分:0)

试试这个

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;
}