Linq嵌套选择查询,结果与所选项具有相同的结构

时间:2013-01-22 06:12:52

标签: c# linq entity-framework

我坚持用Select或SelectMany写一个嵌套查询。

让我们采用传统的嵌套列表:

Sheet has Title fields
SheetDetail has Employee fields

每张工作表都有多个SheetDetails作为主要细节方式。

我想将结果如下所示。

从下面的数据......

Sheet   - SheetDetail
"A Sheet"-{"jane","herry","tom"}
"B Sheet"-{"kane","brown","jane"}
"C Sheet"-{"annie","ralph"}

以下结果只有'jane'但保持相同的主 - 细节结构。

Sheet   - SheetDetail
"A Sheet"-{"jane"}
"B Sheet"-{"jane"}

我试过

sheet.SelectMany(s => s.SheetDetails.Where(d => d.Description.Contains("jane")));

但是我们可以想象,它会给出错误的结果。

我该怎么做?请帮忙 -

2 个答案:

答案 0 :(得分:2)

您可以使用Any来检查:

Sheet.Where(s => s.SheetDetails.Any(d => d.Description == "jane")))
    .Select(s => new Sheet {
            Description = s.Description,
            SheetDetails = s.SheetDetails.Where(d => d.Description == "jane")
        });

答案 1 :(得分:1)

如果你想在结果中只有一个SheetDetail,你可以创建匿名对象,如:

sheet
  .Where(s => s.SheetDetails.Any(d => d == "jane"))
  .Select(s => new {Sheet = s, SheetDetail == s.SheetDetails.First(d => d == "jane")});