【问题标题】:IQueryable return type with Lambda statements带有 Lambda 语句的 IQueryable 返回类型
【发布时间】:2011-06-03 05:14:40
【问题描述】:

我遇到了这个函数的返回类型的问题,并且没有真正接近解决,有人可以帮我解决这个问题吗?

函数来了,

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>>>

谢谢朋友们!

【问题讨论】:

  • GetDiscussion_categories 的返回类型是什么?
  • 它的 IQueryable 约翰

标签: c# silverlight lambda iqueryable return-type


【解决方案1】:

由于您正在调用ToDictionary(),因此您的方法返回Dictionary&lt;&gt;,而不是IQueryable&lt;&gt;

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

如果你绝对想返回IQueryable&lt;&gt;,你可以这样写:

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

【讨论】:

    【解决方案2】:

    返回类型将是:

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

    因为 ToDictionary 的返回类型是 Dictionary 对象,而不是 Dictionary 的 Iqueryable

    【讨论】:

      【解决方案3】:

      好像这个函数会返回:

      Dictionary<Category, List<Board>>
      

      【讨论】:

        【解决方案4】:

        我找到了答案:)

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

        这就是解决方案:)

        感谢您的所有帮助,您的问题和回答让我解决了这个问题:)

        【讨论】:

          【解决方案5】:

          您是在问 lambda 的返回类型是什么?看起来是Dictionary&lt;Category,List&lt;Board&gt;&gt;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-05-27
            • 2011-07-03
            • 1970-01-01
            • 2014-03-10
            • 2016-03-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多