【发布时间】:2019-04-14 16:15:51
【问题描述】:
我有这个 LINQ 查询,它返回下图中显示的数据:
var result = jmdict
.Where(x => x.Sequence == 1438690)
.SelectMany(entry =>
entry.Senses.Select(s =>
(entry.Sequence, s.Glosses.Where(x => x.Language.Code == "eng"))));
有没有人知道如何修改它,以便 item2 只返回 Term 的值(“天气”、“元素”等),而不是它当前返回的 IEnumerator。
1) 我尝试了之前给我的这个建议
var r3 =
jmdict.Where(x => x.Sequence == 1438690)
.SelectMany(entry => entry.Senses.Select(s => s.Glosses.Where(x => x.Language.Code == "eng")
.Select(y => (entry.Sequence, y => y.Term))));
但这不起作用,并且在最后一个 Select 下有一条错误行给出此错误消息:
GetDetails.cs(155,155):错误 CS0411:方法的类型参数 'Enumerable.Select(IEnumerable, Func)' 不能从用法中推断出来。尝试 明确指定类型参数。 (CS0411) (下载)
public static List<IJapaneseDictionaryEntry> jmdict;
public class JapaneseDictionaryEntry : IJapaneseDictionaryEntry {
public int Sequence { get; set; }
private readonly List<Sense> senses = new List<Sense>();
public IEnumerable<ISense> Senses => this.senses;
}
public interface ISense {
IEnumerable<Gloss> Glosses { get; }
}
public class Gloss {
public string Term { get; }
public Language Language { get; }
public Gloss(string term, Language language, string gender)
{
this.Term = term;
this.Language = language;
this.Gender = gender;
}
}
【问题讨论】:
-
是否可以提供json格式的样本数据?
-
看起来您需要在建议的代码中将
.Senses.Select替换为.Senses.SelectMany。任何时候你都应该使用SelectMany,你需要将一个可枚举的可枚举转换为单个可枚举。