我有一个大约的列表。 120,000个物体。从这个列表中我想提取数据以创建Person och Subscription对象。逻辑是1个人可以有1个或更多的报纸订阅。
我正在努力学习如何编写Linq查询,该查询只添加一个新的Person对象(如果尚未创建)。像伪代码一样:
persons.Select(x =>
if (PersonIsAdded(x))
{
var person = GetPerson(x);
person.Address = "XXX";
person.SubscriptionList.Add{new subscription() {Name = "newspaperName}
}
else
{
new Person{ Address = "XYZ", SubscriptionList.Add{new subscription() {Name =
"newspaperName"} }
).ToList();
答案 0 :(得分:0)
如果我正确理解了这个问题,你可以做一些像
这样的事情var person = persons.FirstOrDefault(x => x.Id == yourId);
if (person == null)
{
// create new person with subscription
}
else
{
person.SubscriptionList.Add(subscription)
}
这假设你有一个人物对象的标识符
答案 1 :(得分:0)
根据您向我们展示的代码(忽略复杂的ObjectMapper
),我建议您的代码如下所示:
persons.Select(x =>
{
if (PersonIsAdded(x))
{
var person = GetPerson(x);
person.Address = "XXX";
person.SubscriptionList.Add(
new subscription() { Name = "newspaperName " });
return person;
}
else
{
return new Person()
{
Address = "XYZ",
SubscriptionList = new []
{
new subscription() { Name = "newspaperName" }
}.ToList(),
}
}
}).ToList();
然而,这似乎是错误的。您的代码应该能够像这样简单:
List<Person> query =
(
from x in persons
join n in subscriptions on x equals n.Id into subs
select new Person()
{
Address = x.Address,
SubscriptionList =
subs
.Select(y => new subscription() { Name = n.Name })
.ToList(),
}
).ToList();
但是你没有给我们足够的细节以确保这是正确的。