问题描述
|
有人可以通过linq语句帮助我,
这就是我到目前为止
public class Categories : ObservableCollection<Category>
{
public Categories() { }
public int getBoardIndex(int BoardId)
{
return (from category in this
from board in category.CategoryBoards
where board.BoardId == BoardId
select IndexOf(board)
);
}
}
board是该类别中的一个项目,当我传递bordId(不是索引)时,它必须在每个类别的所有委员会中搜索该BoardId,然后返回该委员会的索引
我如何使用Linq做到这一点?
非常感谢您的帮助!!!
解决方法
编辑
这是同一件事的简单得多的版本:
public int getBoardIndex(int BoardId)
{
return (from category in this
from board in category.CategoryBoards
where board.BoardId == BoardId
select category.CategoryBoards.ToList().IndexOf(board)).FirstOrDefault();
}
原始版本
要获取其所属类别中第一个匹配板的索引,请先找到类别,然后获取板的索引:
public int getBoardIndex(int BoardId)
{
var categoryBoard = (from category in this
from board in category.CategoryBoards
where board.BoardId == BoardId
select new {category,board}).FirstOrDefault();
return categoryBoard.category.CategoryBoards.IndexOf(categoryBoard.board);
}
要获得所有类别中扁平化集合中第一个匹配的Board的索引,@ Dan Tao拥有最佳答案。
, 在我看来,您想要这样的东西:
public int getBoardIndex(int BoardId)
{
var potentialBoards = from category in this
from board in category.CategoryBoards
select board;
return potentialBoards.ToList().FindIndex(b => b.BoardId == BoardId);
}
, 到目前为止,您已经有了一个IEnumerable,其中包含匹配的所有板ID的索引。
如果您知道完全匹配一个板,则可以调用.Single()并返回该单个索引。如果可能有一个匹配的板,则可以调用.ToList()并将结果分配给变量。然后检查列表中是否有任何项目,然后返回第一个项目或-1(或引发异常,等等)。
, 好的,没有看到对象类,我不能确定,但是应该接近这个:
public static int getBoardIndex(this ObservableCollection<Category> coll,int BoardId)
{
return coll.IndexOf((
from category in coll
from board in category.CategoryBoards
where board.BoardId == BoardId
select category).FirstOrDefault());
}