我花了几天(可能是几周)试图解决这个问题。我有两个表,我试图将我的数据组织到以下层次结构中。以下是这个例子:
<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
}
}
任何人都可以帮我吗?
答案 0 :(得分:1)
这是问题所在:
select new wl{d.Key.cat_id}
目前还不清楚你实际打算在这里做什么(无意义的类型名称真的没有帮助),但你可能需要这样的东西:
select new wl { CategoryId = d.Key.cat_id }
现在它是一个对象初始化器而不是集合初始化器。
您似乎不太可能实际想要new wl
,请注意,您已经创建了wl
。同样,除非您的Category
属性实际上是一个集合,否则您可能希望从该组中获取单个条目,而不是查询所有结果。
如果您可以改进命名并提供有关您尝试执行的操作(以及数据层次结构)的更多详细信息,我们可能会为您提供更多帮助。
(顺便说一下,你给出的查询也不会使用LINQPad ......)
答案 1 :(得分: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();
我对你的实体了解不多,而且你的班级名字正在扼杀我。因此,除非您向我提供有关您实体的更多信息,否则我无法提供更多建议。