Asp.net mvc 3 用第一个字母asp.net mvc 3分隔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)

我有一个linq查询,它返回按第一个字母排序的结果。有没有办法在小组收到第一封信之前将第一封信退回?比如,

**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.DbQuery
1[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);