[英]How can I use LINQ to select a property and also other items of a list at the same level?
我有一个IJapaneseDictionaryEntry
对象的列表,如下所述。 在其中是IKanji
对象。
public interface IJapaneseDictionaryEntry
{
int Sequence { get; }
IEnumerable<IKanji> Kanjis { get; }
IEnumerable<IReading> Readings { get; }
IEnumerable<ISense> Senses { get; }
}
每个对象都包含IKanji
对象的列表
public interface IKanji
{
string Text { get; }
IEnumerable<KanjiInformation> Informations { get; }
IEnumerable<Priority> Priorities { get; }
}
我通过此查询选择了数据:
List<IJapaneseDictionaryEntry> entries = dictionary.GetEntries().ToList();
我知道如何做这样的简单查询:
var a = entries.SelectMany(x => x.Kanjis);
以及如何只选择文本:
var a = entries.SelectMany(x => x.Kanjis).Select(x => x.Text);
但是我想看一下案文和优先事项,我不确定该怎么做。 我想做的是得到一个像这样的固定输出:
kanji1 ichimango1 Newspaper1 frequency10
如何通过选择来选择,排序和整理优先级?
像这样:
var a = entries.SelectMany(x => x.Kanjis)
.Select(x => x.Text, Priorities1, Priorities2, Priorities3);
请注意,可能没有优先级1,优先级2或优先级3的条目。
您需要使用要返回的属性创建一个匿名对象:
var a = entries.SelectMany(x => x.Kanjis)
.Select(x => new { x.Text, x.Priorities });
根据您的编辑:如果您只想获得那些具有Priority
Kanjis
,则需要在Select
之后添加Where
:
var a = entries.SelectMany(x => x.Kanjis)
.Select(x => new { x.Text, x.Priorities })
.Where(x => x.Priorities.Any());
但是,我建议在x.Priorities
上调用ToList
,以避免只对是否有元素进行两次迭代相同的集合。 从技术上讲,你也可以使用Where
在前面Select
,但在这种情况下you'd失去调用的能力ToList
避开那些多次迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.