C # - Linq - получить индекс на - Помощь - PullRequest
1 голос
/ 28 мая 2011

может кто-нибудь помочь мне с оператором 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 ]

1 голос
/ 28 мая 2011

РЕДАКТИРОВАТЬ

Это гораздо более простая версия того же самого:

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

Чтобы получить индекс первой совпадающей доски в уплощенной коллекции средивсе категории, тогда @Dan Tao имеет лучший ответ.

1 голос
/ 28 мая 2011

Мне кажется, что вы хотите что-то вроде этого:

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);
}
0 голосов
/ 28 мая 2011

Хорошо, не видя объектный класс, я не могу быть уверен, но это должно быть близко к этому:

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());
}
0 голосов
/ 28 мая 2011

Пока у вас есть IEnumerable, содержащий индексы любых идентификаторов доски, которые совпадают.

Если вы знаете, что есть ровно одна доска, которая соответствует, вы можете вызвать .Single () и вернуть этот единственныйиндекс.Если может быть или не быть одной доски, которая соответствует, то вы можете вызвать .ToList () и присвоить результат переменной.Затем проверьте, есть ли в списке какие-либо элементы, и либо верните первый элемент, либо -1 (или сгенерируйте исключение, или что-то еще).

...