Asp.net mvc 3 用第一个字母asp.net mvc 3分隔linq结果
我有一个linq查询,它返回按第一个字母排序的结果。有没有办法在小组收到第一封信之前将第一封信退回?比如,Asp.net mvc 3 用第一个字母asp.net mvc 3分隔linq结果,asp.net-mvc-3,linq-to-entities,sql-order-by,Asp.net Mvc 3,Linq To Entities,Sql Order By,我有一个linq查询,它返回按第一个字母排序的结果。有没有办法在小组收到第一封信之前将第一封信退回?比如, **A** Acountants Apothecary **B** Basketball Biscuits 等等。我试着像这样对我的结果进行分组 var companyquery = (from c in db.Categories group c by c.Name.Substring(0, 1)
**A**
Acountants
Apothecary
**B**
Basketball
Biscuits
等等。我试着像这样对我的结果进行分组
var companyquery = (from c in db.Categories
group c by c.Name.Substring(0, 1)
into cgroup
select new
{
FirstLetter = cgroup.Key,
Names = cgroup
}).OrderBy(letter => letter.FirstLetter);
return View(companyquery);
但有一个错误:
“传递到字典的模型项的类型为'System.Data.Entity.Infrastructure.DbQuery1[f_uAnonymousType3
1[System.String]],但此字典需要'System.Collections.Generic.IEnumerable'1[NewAtAClick.Models.Category]类型的模型项。”
所以现在我使用orderby而不是group uu uu
var companyquery = (from c in db.Categories
orderby c.Name.Substring(0, 1)
select c);
这是按字母顺序返回的。我试着说
letter1 = companyquery.ToString().SubString(0,1)
然后
但什么都没有
提前感谢!错误说明了一切。您的视图需要类型为
IEnumerable
的模型,但您传入了其他内容(在本例中,因为您通过调用选择新{…}
创建了一个新的匿名类型)
相反,您可以声明一个新类型:
public class AlphabeticalMapping<T> {
public char FirstLetter { get; set; }
public List<T> Items { get; set; }
}
公共类字母映射{
公共字符第一个字母{get;set;}
公共列表项{get;set;}
}
并将查询更改为返回:
var companyquery = (from c in db.Categories
group c by c.Name.Substring(0, 1)
into cgroup
select new AlphabeticalMapping<Category>() {
FirstLetter = cgroup.Key,
Items= cgroup.ToList()
}).OrderBy(mapping => mapping.FirstLetter);
var companyquery=(来自db.Categories中的c
按c.Name.Substring(0,1)分组c
进入cgroup
选择新的字母映射(){
FirstLetter=cgroup.Key,
Items=cgroup.ToList()
}).OrderBy(mapping=>mapping.FirstLetter);
并将视图更改为期望
IEnumerable
如果尝试此操作,会发生什么
var companyquery = (from c in db.Categories
group c by c.Name.Substring(0, 1)
into cgroup
select new,
{
FirstLetter = cgroup.Key,
Names = cgroup
})
.OrderBy(letter => letter.FirstLetter)
.ToDictionary(k => k.FirstLetter, e => e.Names);
将您的组粘贴到代码中,这样应该可以正常工作,但要理解,它不是一个直接的列表,而是部分ie组。我已经添加了我用来对它进行分组的代码。谢谢。
字典
不能保证它的键值对被枚举的顺序。因此视图实际上可能会丢失字母顺序。@Marcind,很好,但是我想我从错误消息中得到的印象是视图需要一本词典。@Marcind,看起来你的回答更进一步,说视图应该有一个类型为IEnumerable
的模型,所以我会支持你的。谢谢你的帮助marcin。我是一个初学者,你已经清楚了错误的含义,而不仅仅是givi请告诉我答案,太好了!我不得不出人意料地离开办公室,所以我明天会试试这个,并对我的进展进行评论。再次感谢!我也只是从C#开始,这真的帮了我大忙!谢谢。
var companyquery = (from c in db.Categories
group c by c.Name.Substring(0, 1)
into cgroup
select new,
{
FirstLetter = cgroup.Key,
Names = cgroup
})
.OrderBy(letter => letter.FirstLetter)
.ToDictionary(k => k.FirstLetter, e => e.Names);