繁体   English   中英

如何使用LINQ在同一级别选择属性以及列表的其他项?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM