我有一个高度嵌套的类,并试图找到一个埋藏在其中的单个项目。以下给出了一个错误“无法将类型匹配转换为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>';
答案 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();