我有这个列表:
安妮 - P
五月-《》
安妮 - P
五月 - P
我想根据名称获取最后一个元素:
安妮 - P
五月 - P
我有这段代码,但它要么抛出错误:The type arguments for method 'System.Linq.Enumerable.SelectMany<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,System.Collections.Generic.IEnumerable<TResult>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
或者我只得到列表中的最后一个元素(May - P)。
class Passenger
{
public string Name { get; set; }
public int PassengerID { get; set; }
public List<TravelDoc> TravelDocs { get; set; }
}
class TravelDoc
{
public string DocType { get; set; }
public int? DocNumber { get; set; }
}
List<Passenger> modList = new List<Passenger>()
{
new Passenger() { Name = "Annie", PassengerID = 0,
TravelDocs = new List<TravelDoc>()
{
new TravelDoc() { DocNumber = 100, DocType = "P" }
}
},
new Passenger() { Name = "May", PassengerID = 1,
TravelDocs = new List<TravelDoc>()
{
new TravelDoc() { DocNumber = null, DocType = "" }
}
},
new Passenger() { Name = "Annie", PassengerID = 0,
TravelDocs = new List<TravelDoc>()
{
new TravelDoc() { DocNumber = 100, DocType = "P" }
}
},
new Passenger() { Name = "May", PassengerID = 1,
TravelDocs = new List<TravelDoc>()
{
new TravelDoc() { DocNumber = 200, DocType = "P" }
}
}
};
代码(引发错误)
var passengersMod = modList.SelectMany(pax => pax.TravelDocs
.Select(doc => new { Passenger = pax, TravelDoc = doc })
.Last())
.Dump();
代码(错误结果)
var passengersMod = modList.SelectMany(pax => pax.TravelDocs
.Select(doc => new { Passenger = pax, TravelDoc = doc })
).Last()
.Dump();
注意: Dump() 是 LINQPad 扩展。 :D
如何使用 LINQ 获得我想要的结果?
提前致谢。
编辑:
好吧,似乎大多数人都对“基于名称”条件感到困惑。对此感到抱歉,但不幸的是我想不出更好的词语来描述标准(抱歉)。但乔恩·汉纳明白我的意思,所以谢谢!我还按照建议从标题中删除了“匿名类型”。再次感谢! :D
另一次编辑:
我还有另一个类似的情况,但略有不同。是的,列表是根据某些标准(在本例中按名称)进行分组的,但我不需要每个分组中的最后一个项目,而是需要每个分组中的第 n 个项目。
我能够从每个分组中获得第 n 个:
modList.GroupBy(p => p.Name).Select(g => g.ToList()[index])
我问这个问题多年后,乔恩的回答仍然对我有帮助。我多么希望我能为他的回答投两次票!我希望这可以帮助其他人。 :D
最佳答案
为什么不忽略匿名类型和 SelectMany
并执行以下操作:
modList.GroupBy(p => p.Name).Select(g => g.Last())
根据您的标题,这与匿名类型无关,但它确实会导致您在问题开头提到的那种结果。
关于c# - 获取列表中的最后一个元素(基于名称) - LINQ C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844901/