我试图从字典中获取一个具有最小值和bool的对象,是否已经检查过。
var minTile = (from i in openedGridTIle let minCost = openedGridTIle.Min(m => m.Value.TotalCost)
where i.Value.TotalCost == minCost select i).FirstOrDefault();
通过LINQ的一个请求它工作正常,我可以获得具有最小值的对象,如果未检查对象,如何获得具有最小值的对象?
我的尝试:
var minTile = (from i in openedGridTIle let minCost = openedGridTIle.Min(m => m.Value.TotalCost)
where i.Value.TotalCost == minCost select i).FirstOrDefault();
//&&
//(from b in openedGridTIle let chekVal = openedGridTIle.Select( f => !f.Value.Walkable )
// where b.Value.Walkable = chekVal select b).FirstOrDefault());
但它不起作用?可以在两个请求中做到吗?
答案 0 :(得分:1)
我相信您正在尝试根据最低TotalCost
找到价值,之后您尝试针对bool
字段添加支票。您可以将原始查询缩短为:
var minTile = openedGridTIle.Values
.OrderBy(m=> m.TotalCost)
.FirstOrDefault();
稍后,如果您想针对bool值添加检查,则可以执行以下操作:
var minTile = openedGridTIle.Values
.OrderBy(m=> m.TotalCost)
.FirstOrDefault(f=> f.Walkable == false);
或
var minTile = openedGridTIle.Values
.OrderBy(m=> m.TotalCost)
.FirstOrDefault(f=> !f.Walkable);
您也可以在两个请求中执行此操作,例如:
var minTile = openedGridTIle.Values.Min(r=> r.TotalCost);
var items = openedGridTIle.Values
.Where(r=> r.TotalCost == minTile
&& !r.Walkable);
您将获得IEnumerable<T>
个项目。如果您只对单个项目感兴趣,则可以向项目添加FirstOrDefault()
,或将Where
替换为FirstOrDefault
,因为它也会接受谓词。