如何根据客户联系人姓名对 Northwind 订单进行分组
How to group Northwind orders based on Customer ContactName
我是 C# 和 LINQ 的新手,我正在使用 Northwind 数据库。我的视图显示了数据库中的所有订单,但没有排序。我想根据联系人姓名(客户)和字母顺序显示订单:例如,AVARIA 以及该客户的所有订单。等等...
我想要这样的东西:
AVARIA
ORDER 1 OF AVARIA FROM DATABASE WITH ITS DETAILS
ORDER 2 OF AVARIA FROM DATABASE WITH ITS DETAILS
ORDER 3 OF AVARIA FROM DATABASE WITH ITS DETAILS
BECUA
ORDER 1 OF BECUA FROM DATABASE WITH ITS DETAILS
ORDER 2 OF BECUA FROM DATABASE WITH ITS DETAILS
and so on...
因为这向我显示了所有来自数据库的订单,没有任何排序,比如第一行有一个订单的客户 X,然后是客户 Y,然后是另一个订单的客户 X,依此类推。我试过这个:
public ActionResult Index()
{
var orders = db.Orders.Include(o => o.Customer).Include(o => o.Employee).Include(o => o.Shipper);
var list = orders.OrderBy(x => x.Customer.ContactName);
return View(list.ToList());
}
但它引发了以下异常:
An exception of type
'System.Data.Entity.Core.EntityCommandExecutionException' occurred in
EntityFramework.SqlServer.dll but was not handled in user code
视图工作正常。
请帮忙。
您可以使用 group by 和 orderby。样本:
class Program
{
class grpitem
{
public string groupCode;
public string item;
}
static List<grpitem> list = new List<grpitem>()
{
new grpitem() {groupCode="3", item="b"},
new grpitem() {groupCode="1", item="b"},
new grpitem() {groupCode="3", item="c"},
new grpitem() {groupCode="2", item="b"},
new grpitem() {groupCode="2", item="a"},
new grpitem() {groupCode="2", item="c"},
new grpitem() {groupCode="1", item="a"},
new grpitem() {groupCode="3", item="a"},
new grpitem() {groupCode="3", item="d"}
};
static void Main(string[] args)
{
IEnumerable<grpitem> ordered = list.GroupBy(grp => grp.groupCode)
.SelectMany(g => g.OrderBy(grp => grp.item)).OrderBy(g => g.groupCode);
foreach(grpitem g in ordered)
Console.WriteLine("groupCode:{0} item:{1}",g.groupCode,g.item);
Console.ReadLine();
}
}
输出:
groupCode:1 item:a
groupCode:1 item:b
groupCode:1 item:c
groupCode:1 item:d
groupCode:2 item:a
groupCode:2 item:b
groupCode:3 item:a
groupCode:3 item:b
groupCode:3 item:c
您可以使用 GroupBy(...)
public ActionResult Index()
{
var orders = db.Orders.Include(o => o.Customer).Include(o => o.Employee).Include(o => o.Shipper);
var groupedOrders = orders.GroupBy(o => Customer.Name, o => o);
// grouped orders is IEnumerable<string, IEnumerable<Order>>
return View(groupedOrders);
}
我是 C# 和 LINQ 的新手,我正在使用 Northwind 数据库。我的视图显示了数据库中的所有订单,但没有排序。我想根据联系人姓名(客户)和字母顺序显示订单:例如,AVARIA 以及该客户的所有订单。等等...
我想要这样的东西:
AVARIA
ORDER 1 OF AVARIA FROM DATABASE WITH ITS DETAILS
ORDER 2 OF AVARIA FROM DATABASE WITH ITS DETAILS
ORDER 3 OF AVARIA FROM DATABASE WITH ITS DETAILS
BECUA
ORDER 1 OF BECUA FROM DATABASE WITH ITS DETAILS
ORDER 2 OF BECUA FROM DATABASE WITH ITS DETAILS
and so on...
因为这向我显示了所有来自数据库的订单,没有任何排序,比如第一行有一个订单的客户 X,然后是客户 Y,然后是另一个订单的客户 X,依此类推。我试过这个:
public ActionResult Index()
{
var orders = db.Orders.Include(o => o.Customer).Include(o => o.Employee).Include(o => o.Shipper);
var list = orders.OrderBy(x => x.Customer.ContactName);
return View(list.ToList());
}
但它引发了以下异常:
An exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
视图工作正常。
请帮忙。
您可以使用 group by 和 orderby。样本:
class Program
{
class grpitem
{
public string groupCode;
public string item;
}
static List<grpitem> list = new List<grpitem>()
{
new grpitem() {groupCode="3", item="b"},
new grpitem() {groupCode="1", item="b"},
new grpitem() {groupCode="3", item="c"},
new grpitem() {groupCode="2", item="b"},
new grpitem() {groupCode="2", item="a"},
new grpitem() {groupCode="2", item="c"},
new grpitem() {groupCode="1", item="a"},
new grpitem() {groupCode="3", item="a"},
new grpitem() {groupCode="3", item="d"}
};
static void Main(string[] args)
{
IEnumerable<grpitem> ordered = list.GroupBy(grp => grp.groupCode)
.SelectMany(g => g.OrderBy(grp => grp.item)).OrderBy(g => g.groupCode);
foreach(grpitem g in ordered)
Console.WriteLine("groupCode:{0} item:{1}",g.groupCode,g.item);
Console.ReadLine();
}
}
输出:
groupCode:1 item:a
groupCode:1 item:b
groupCode:1 item:c
groupCode:1 item:d
groupCode:2 item:a
groupCode:2 item:b
groupCode:3 item:a
groupCode:3 item:b
groupCode:3 item:c
您可以使用 GroupBy(...)
public ActionResult Index()
{
var orders = db.Orders.Include(o => o.Customer).Include(o => o.Employee).Include(o => o.Shipper);
var groupedOrders = orders.GroupBy(o => Customer.Name, o => o);
// grouped orders is IEnumerable<string, IEnumerable<Order>>
return View(groupedOrders);
}