我如何使用linq或任何其他方法从对象中选择一个项目

时间:2017-12-11 09:19:54

标签: c# linq

我有两个名为Transactions和CreditorDetails的对象。我希望能够从我的transations对象中获取检索说CFirstName。我不想从CreditorDetails中检索它。例如,我想能够说

foreach ( Transactions item in info.transaction)
{
     Console.WriteLine("My Name" + item.creditors.Select(m =>m.CFirstName));//Just an example
}

上面的代码没有给我想要的结果。它正在返回system.linq.Enumerable + whereSelectListIterator ...........我认为我知道为什么但我需要能够从Transaction对象中获取CFirstName。

class Transactions
{
     public List<CreditorsDetails> creditors { get; set; }
     //Contains some other things which i didn't bother inlude since they are irrelevant 
}

class CreditorsDetails 
{
     public string CFirstName { get; set; }
     public string CAddress { get; set; }
     public string CCountry { get; set; }
}

2 个答案:

答案 0 :(得分:0)

Select会为您提供一个strings的可枚举,您需要对其进行迭代才能访问该信息:

foreach (Transactions item in info.transaction)
{
    foreach (var cfName in item.creditors.Select(m => m.CFirstName))
    {
        Console.WriteLine("My Name" + cfName);
    }
}

如果您只想要列表中的第一项,您还可以使用FirstOrDefault

foreach (Transactions item in info.transaction)
{
    Console.WriteLine("My Name" + item.creditors.Select(m => m.CFirstName).FirstOrDefault());
}

答案 1 :(得分:0)

您可以使用SelectMany从子列表中检索项目:

var result = info.transaction.SelectMany(x => x.creditors.Select(y => y.CFirstName));

内部Select检索交易的债权人的名字列表。通过使用SelectMany,您可以在一个列表中连接所有债权人的所有名字列表。

如果您只想返回不同的值,可以添加对Distinct的调用:

var result = info.transaction.SelectMany(x => x.creditors.Select(y => y.CFirstName))
               .Distinct();