【发布时间】:2015-01-19 03:26:53
【问题描述】:
每个人。我无法找到从 N-N 关系中检索数据的最佳方法...
我有以下 SQL 查询和结果集:
select
p.PersonID,
Name,
PhoneNumber
from Persons p
left join PhoneNumbers n on p.PersonID = n.PersonID;
PersonID Name PhoneNumber
----------- ------------ --------------------
1 John 1111111
1 John 2222222
1 John 3333333
2 Maria 4444444
2 Maria 5555555
3 Billy 6666666
我想在我的客户端应用程序 (C#) 中将这些结果解析为一组对象。现在我有以下代码,但我想知道是否有更好的方法来做到这一点......
public class Person
{
public int ID;
public string Name;
public List<PhoneNumbers> PhoneNumbers = new List<PhoneNumbers>();
}
public class PhoneNumbers
{
public Person Owner;
public string PhoneNumber;
}
public List<Person> GetPersons()
{
const string query = @"select
p.PersonID,
Name,
PhoneNumber
from Persons p
left join PhoneNumbers n on p.PersonID = n.PersonID;";
DataTable dataTable = Select(query);
var groups = from row in dataTable.Rows.Cast<DataRow>()
group row by row["PersonID"];
List<Person> persons = new List<Person>();
foreach (var group in groups)
{
Person person = new Person
{
ID = (int)group.ElementAt(0)["PersonID"],
Name = group.ElementAt(0)["Name"] as string
};
foreach (var row in group)
{
person.PhoneNumbers.Add(new PhoneNumbers
{
Owner = person,
PhoneNumber = row["PhoneNumber"] as string
});
}
persons.Add(person);
}
return persons;
}
非常感谢。
【问题讨论】:
-
您可以使用 LINQ-SQL。你能显示数据库表模式吗?
标签: c# sql linq merge resultset