-1

我花了几天(也许几周)试图解决这个问题。我有两个表,我试图将我的数据组织到以下层次结构中。这是一个应该是什么样子的示例:

<ul><strong>PageTitle</strong>

<li>Category A</li>
<li>Category B</li>
<li>Category C</li>

我的查询在 LinQPad 中成功运行,但无法在 MVC 中运行。这是我在 MVC 中使用的代码。

public IEnumerable<wl> List()
{
    IEnumerable<wl> wlTest;
    using (LibEntities _libEntity = new LibEntities())  {  
             wlTest = (from p in table1
                       join c in table2 on p.PK equals c.FK
                       group p by new { c.title } into g
                       select new wl
                        {
                          TitleName = g.Key.title,
                          Category = from p in g
                                     group p by g.cat_id into d
                                     select new wl{d.Key.cat_id}
                      }).ToList();

            return wlTest;

    }
}

这是wl类信息:

public class wl
{
    public string TitleName { get; set; }
    public string Category { get; set; }
}

我不断得到

无法使用集合初始化程序初始化类型“LibraryProject.Model.wl”,因为它没有实现“System.Collections.IEnumerable”。

好的,这是 LinqPad 中的一个非常相似的查询。

from f_a_p in Find_article_progs
join f_a in Find_articles on f_a_p.Prog_num equals f_a.DbProg 
where f_a_p.Parent_id == 183
group f_a by new {f_a_p.Prog_title} into d
select new {
    d.Key.Prog_title, 
    Links = from f_a in d
            group f_a by new {f_a.DbTitle} into c
            select new {
                c.Key.DbTitle
            }
}

谁能帮我这个?

4

2 回答 2

1

这就是问题:

select new wl{d.Key.cat_id}

目前尚不清楚您在这里实际打算做什么(无意义的类型名称确实无济于事),但您可能想要类似的东西:

select new wl { CategoryId = d.Key.cat_id }

这现在是一个对象初始化器,而不是一个集合初始化器。

请注意,您似乎根本不可能真正想要new wl- 鉴于您已经在创建一个wl. 同样,除非您的Category属性实际上是一个集合,否则您可能希望从组中获取单个条目,而不是查询的所有结果。

如果您可以改进您的命名并提供有关您正在尝试做的事情(以及您的数据层次结构)的更多详细信息,我们可能会为您提供更多帮助。

(顺便说一下,您给出的查询也不会使用 LINQPad...)

于 2013-12-30T19:45:52.097 回答
0

在这里不要输入 g.Key.title_name,因为已经g.Key是你的标题名称

TitleName = g.Key.title_name  // wrong
TitleName = g.Key // correct

在选择您的类别时,我认为您想做这样的事情:

Categories = (from c in g 
               where c.TitleName == g.Key 
                 select c).ToList();

我对你的实体了解不多,你的班级名字让我很生气。因此,除非您向我提供有关您的实体的更多信息,否则我无法提供更多建议。

于 2013-12-30T19:56:55.240 回答