0

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

让我们以传统的嵌套列表为例:

Sheet has Title fields
SheetDetail has Employee fields

每个 Sheet 都有多个 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")));

但正如我们可以想象的那样,它给出了错误的结果。

我怎样才能做到?请帮忙-

4

2 回答 2

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")
        });
于 2013-01-22T06:17:53.643 回答
1

如果您希望结果中只有一个 SheetDetail,您可以创建匿名对象,例如:

sheet
  .Where(s => s.SheetDetails.Any(d => d == "jane"))
  .Select(s => new {Sheet = s, SheetDetail == s.SheetDetails.First(d => d == "jane")});
于 2013-01-22T06:21:15.027 回答