IQueryable возвращаемый тип с лямбда-операторами - PullRequest
1 голос
/ 03 июня 2011

У меня проблема с типом возвращаемого значения для этой функции, и я почти не могу найти решение, может кто-нибудь мне помочь с этим?

здесь идет функция,

public IQueryable<System.Collections.Generic.Dictionary<discussion_category, List<discussion_board>>> GetDiscussion_categoriesWithBoards()
{
    return GetDiscussion_categories().Select(c =>
        new
        {
            Category = c,
            Boards = GetDiscussion_boardsByCategory(c.ID).ToList()
        }).ToDictionary(i => i.Category, i => i.Boards.ToList());
}

другая функция, которая работает, которая используется в вышеупомянутой функции, которая не работает,

public IQueryable<discussion_board> GetDiscussion_boardsByCategory(int CategoryID)
{
    return this.ObjectContext.discussion_boards.Where(e => e.CategoryID == CategoryID);
}
public IQueryable<discussion_category> GetDiscussion_categories()
{
    return this.ObjectContext.discussion_categories;
}

Мне нужно, чтобы это был тип возврата:

IQueryable<System.Collections.Generic.Dictionary<discussion_category, List<discussion_board>>>

спасибо, друзья!

Ответы [ 5 ]

3 голосов
/ 03 июня 2011

Поскольку вы вызываете ToDictionary () , ваш метод возвращает Dictionary<>, а не IQueryable<>:

public Dictionary<discussion_category, List<discussion_board>>
GetDiscussion_categoriesWithBoards()
{
    // ...
}

Если вы абсолютно хотите вернуть IQueryable<>, вы можете написать что-то вроде:

public IQueryable<Dictionary<discussion_category, List<discussion_board>>>
GetDiscussion_categoriesWithBoards()
{
    return new[] {
        GetDiscussion_categories().Select(c => new {
            Category = c,
            Boards = GetDiscussion_boardsByCategory(c.ID).ToList()
        }).ToDictionary(i => i.Category, i => i.Boards.ToList())
    }.AsQueryable();
}
1 голос
/ 03 июня 2011

Я нашел ответ:)

public IQueryable<System.Collections.Generic.Dictionary<discussion_category, List<discussion_board>>> GetDiscussion_categoriesWithBoards()
{
    return (GetDiscussion_categories().Select(c =>
        new
        {
            Category = c,
            Boards = GetDiscussion_boardsByCategory(c.ID).ToList()
        }).ToDictionary(i => i.Category, i => i.Boards.ToList())).AsQueryable() as IQueryable<System.Collections.Generic.Dictionary<discussion_category, List<discussion_board>>>;
}

это решение:)

спасибо за вашу помощь, ваши вопросы и ответы приведут меня к решению этой проблемы:)

1 голос
/ 03 июня 2011

Кажется, что эта функция вернет:

Dictionary<Category, List<Board>>
1 голос
/ 03 июня 2011

Тип возвращаемого значения будет:

System.Collections.Generic.Dictionary<discussion_category, List<discussion_board>>

, поскольку тип возвращаемого значения ToDictionary - это объект Dictionary, а не Iqueryable из Dictionary

0 голосов
/ 03 июня 2011

Вы спрашиваете, каков тип возврата лямбды?Это выглядит как Dictionary<Category,List<Board>>

...