Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq嵌套选择查询和结果与所选项具有相同的结构_C#_Linq_Entity Framework - Fatal编程技术网

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

C# Linq嵌套选择查询和结果与所选项具有相同的结构,c#,linq,entity-framework,C#,Linq,Entity Framework,我努力用Select或SelectMany编写一个嵌套查询 让我们以传统的嵌套列表为例: Sheet has Title fields SheetDetail has Employee fields 每个图纸都有多个作为主详图方式的图纸详图 我想得出如下结果 从下面的数据 Sheet - SheetDetail "A Sheet"-{"jane","herry","tom"} "B Sheet"-{"kane","brown","jane"} "C Sheet"-{"annie","ral

我努力用Select或SelectMany编写一个嵌套查询

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

Sheet has Title fields
SheetDetail has Employee fields
每个图纸都有多个作为主详图方式的图纸详图

我想得出如下结果

从下面的数据

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")));
但正如我们所能想象的,它给出了错误的结果


我怎样才能做到?请提供帮助-

您可以使用
任何
检查:

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")
        });

您可以使用
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")
        });

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

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

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

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

SheetDetail有Employee字段
哪一个是字符串?{“jane”、“herry”、“tom”}是一条记录的描述还是三条记录的描述?你需要进一步澄清你的观点question@IlyaIvanov//是的,为了简单起见,这里只有一个字符串。@CuongLe//谢谢您的关注。是的,三条记录,如List,您可以定义您的类和预期结果吗?
SheetDetail有Employee字段
哪一条是字符串?{“jane”、“herry”、“tom”}是一条记录或三条记录的描述?你需要进一步澄清你的观点question@IlyaIvanov//是的,为了简单起见,这里只有一个字符串。@CuongLe//谢谢您的关注。是的,三张像List这样的记录你能定义你的课程和预期结果吗?即使我不能选择你的作为答案,但我支持你的。谢谢你的好意。即使我不能选择你的答案,但我还是投你的票。谢谢你的好意。