需要帮助来制作优雅的LINQ查询

kfo*_*eck 0 .net c# linq list data-structures

我有一个名为waferMap的对象,其中包含bluetapes列表; 每个bluetape都包含一个模具打印列表,每个模具打印都有一个名称.我需要能够从bluetape列表中提取基于其名称的骰子打印,如果它不存在,我需要它返回null,而不是崩溃应用程序.

总结层次结构:

WaferMap has a List<BlueTape>
BlueTape has a List<DiePrint>
DiePrint has name (of type string)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止:

    print = waferMap.BluetapeList
                    .Select(x => x.DiePrintList)
                    .First(x => x.Contains(print, new DiePrint.Comparer()))
                    .First(x => x.Name == print.Name);
Run Code Online (Sandbox Code Playgroud)

这是DiePrint类的比较器对象:

    public class Comparer : IEqualityComparer<DiePrint>
    {
        public bool Equals(DiePrint x, DiePrint y) { return x.Name == y.Name; }
        public int GetHashCode(DiePrint obj) { return obj.Name.GetHashCode(); }
    }
Run Code Online (Sandbox Code Playgroud)

现在它总是因某种原因找到一个匹配,即使任何bluetapes模具打印列表中没有模具打印存在具有适当的名称.

And*_*rey 6

waferMap.BluetapeList
        .SelectMany(bt => bt.DiePrintList)
        .FirstOrDefault(dp => dp.Name == print.Name);
Run Code Online (Sandbox Code Playgroud)

SelectMany展平列表(docs).