1

誰かが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)
                    );
    }
}

ボードはカテゴリ内のアイテムであり、bordId(インデックスではない)を渡すと、各カテゴリのすべてのボードでそのBoardIdを検索し、そのボードのインデックスを返す必要があります。

Linqを使用してそれを行うにはどうすればよいですか?

本当にありがとうございました!!!

4

4 に答える 4

1

あなたがこのようなものを望んでいるように私には見えます:

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);
}
于 2011-05-27T20:28:27.360 に答える
1

編集

これは同じもののはるかに単純なバージョンです:

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

すべてのカテゴリの中でフラット化されたコレクションの最初に一致するボードのインデックスを取得するには、@DanTaoがベストアンサーです。

于 2011-05-27T20:45:52.383 に答える
0

これまでのところ、一致したボードIDのインデックスを含むIEnumerableがあります。

一致するボードが1つだけあることがわかっている場合は、.Single()を呼び出して、その単一のインデックスを返すことができます。一致するボードが1つある場合とない場合は、.ToList()を呼び出して、結果を変数に割り当てることができます。次に、リストにアイテムが含まれているかどうかを確認し、最初のアイテムまたは-1を返す(または例外をスローするなど)。

于 2011-05-27T20:19:48.543 に答える
0

わかりました。オブジェクトクラスが表示されていないとわかりませんが、これに近いはずです。

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());
}
于 2011-05-27T20:24:49.990 に答える