使用if语句的LINQ查询

时间:2017-02-27 10:14:56

标签: c# linq

我有一个大约的列表。 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();

2 个答案:

答案 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();

但是你没有给我们足够的细节以确保这是正确的。

相关问题