linq - 在多个列表中的列表中查找项目

时间:2018-03-19 09:01:10

标签: c# linq

我有一个高度嵌套的类,并试图找到一个埋藏在其中的单个项目。以下给出了一个错误“无法将类型匹配转换为bool”,虽然我不明白为什么它认为我试图返回一个布尔值。

echo '<td style="text-align: center"><a onclick=" window.open(\'/edit.php?id=' . $row['id'] . '\',\'_self\')"><img height="30" width="30" src="/wp-content/themes/sparkling/edit.png"/></a></td>';

5 个答案:

答案 0 :(得分:2)

Where本身返回一个(延迟的)可枚举的项目,因此不能被外部Where用作条件。您可能想要做的是在外部Contains()内使用Any()All()Where,这将返回您要查找的结果。

这样的事情可能就是你所追求的:

var match = community.TeamLeagues.Where(t =>
        t.Seasons.Any(
        s => s.Divisions.Any(
        d => d.Matches.Any(
        m => m.Id == "1234")
        )));

答案 1 :(得分:1)

Where方法需要评估返回bool的表达式。您的嵌套Where没有这样做 - 唯一的位置是最后一个a => a.Id == "1234",所有其他表达式都返回IEnumerable

答案 2 :(得分:0)

z.Matches.Where(a => a.Id == "1234").FirstOrDefault()返回类型为Match的对象(您的IEnumerable Matches的集合项类型)(或null),没有布尔值。我想您需要检查ID为1234的匹配项中是否有entires。使用Any评估条件:

var match = community.TeamLeagues.Where(x => 
              x.Seasons.Any(y => 
                y.Divisions.Any(z => 
                   z.Matches.Any(a => a.Id == "1234")
            )));

[items.Where(x => x.Id == 4).Any()items.Any(x => x.Id == 4)]

相同

这将返回所有TeamLeagues,其中包含一个Season,其中包含一个Division,其中包含一个具有id为1234的元素的Match。

答案 3 :(得分:0)

为简化起见,您还可以直接使用Matches表格,并使用ViewModel表示您的观点。

像:      var MyViewModel =(来自Mathes中的l                            其中l.Id ==“1234”                            选择新的MyViewModel                           {                                Id = l.Id,                                MatchName = l.Name,                             })ToList();

答案 4 :(得分:0)

无法使用linq,但可以使用查询语法。

var leagueMatch = (from teamLeague in community.TeamLeagues
                from season in teamLeague.Seasons
                from division in season.Divisions
                from match in division.Matches.Where(x => x.Id == "1234")
                select match).FirstOrDefault();