列表作为linq查询结果的属性
本文关键字:结果 属性 查询 linq 列表 | 更新日期: 2023-09-27 18:06:21
我有两个类:
class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}
class Phone
{
public int PersonId { get; set; }
public string Number { get; set; }
}
和两个集合:
List<Person> Persons;
List<Phone> Phones;
我想加入他们使用linq和得到作为结果对象的结果列表:
class Result
{
public string Name { get; set; }
public List<string> Numbers { get; set; }
}
如何在linq中实现这个?
var resultList =
from person in Persons
select new Result
{
Name = person.Name,
Numbers =
(
from phone in Phones
where phone.PersonId == person.PersonId
select phone.Number
).ToList()
}
假设所有的电话号码都指向一个现有的人,这样就可以了:
var results = Phones.GroupBy(p => p.PersonId)
.Select(g => new Result()
{
Name = Persons.Single(x => x.PersonId == g.Key).Name,
Numbers = g.Select(x => x.Number).ToList()
});
和Mike很像…
var resultList = from person in persons
select new Result
{
Name = person.Name,
Numbers = phones
.Where(x => x.PersonId == person.PersonId)
.Select(x => x.Number)
.ToList()
};
纯方法语法:
List<Person> people = new List<Person>(); /*Populate the list however you wish*/
List<Phone> phones = new List<Phone>(); /*Populate the list however you wish*/
List<Result> results = people
.Select(singlePerson => new Result
{
Name = singlePerson.Name,
Numbers = phones
.Where(singlePhone => singlePhone.PersonId.Equals(singlePerson.PersonId))
.Select(singlePhone => singlePhone.Number)
.ToList()
})
.ToList();
可以使用Linq的join函数
var joinedList = from c in Persons
join p in Phones p on p.PersonId equals c.PersonId
select new {Persons = c, Phones = p};
更新:
似乎必须作为Result返回。
var results = Persons.Select(c => new Result
{
Name = c.Name,
Numbers = Phones.Where(p=>p.PersonId == c.PersonId)
.Select(n=>n.Number).ToList()
});
好吧,我不会通过将电话项添加到人员中来连接两个集合。根据你想要实现的目标,我将使用一个接口来指定这两个类是否有共同之处。
但其他解决方案也可以,只是可能不是正确的解决方案,这取决于你的问题。