我有一个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可能没有任何条目
答案 0 :(得分:4)
您需要使用要返回的属性创建一个匿名对象:
// Where Context property returns a singleton instance of MyDbContext
var db = MyDbContextFactory.Context;
var data = new MyData { Timestamp = DateTime.UtcNow, Data = "123" };
db.MyData.Add(data);
db.SaveChanges();
根据您的编辑:如果您只想获得完全具有var a = entries.SelectMany(x => x.Kanjis)
.Select(x => new { x.Text, x.Priorities });
的{{1}},则需要在Kanjis
之后添加Priority
:< / p>
Where
但是,我建议在Select
上调用var a = entries.SelectMany(x => x.Kanjis)
.Select(x => new { x.Text, x.Priorities })
.Where(x => x.Priorities.Any());
,以避免仅对确定是否有任何元素进行两次迭代相同的集合。从技术上讲,您可以在ToList
前面也使用x.Priorities
,但是在这种情况下,您将失去调用Where
的能力,从而避免了多次迭代