Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据客户联系人姓名对Northwind订单进行分组_C#_Linq_Model View Controller_Northwind - Fatal编程技术网

C# 如何根据客户联系人姓名对Northwind订单进行分组

C# 如何根据客户联系人姓名对Northwind订单进行分组,c#,linq,model-view-controller,northwind,C#,Linq,Model View Controller,Northwind,我是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 DATABAS

我是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());
}
但它提出了以下例外:

类型的例外 中出现“System.Data.Entity.Core.EntityCommandExecutionException” EntityFramework.SqlServer.dll,但未在用户代码中处理

风景不错


请提供帮助。

您可以使用分组依据和医嘱依据。样本:

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();
    }
}
您可以使用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);
//分组顺序是IEnumerable
返回视图(groupedOrders);
}

您不知道如何将订单列表转换为客户列表。您应该在那里应用排序。@GertArnold我尝试过:var orders=db.orders.Include(o=>o.Customer.Include)(o=>o.Employee.Include(o=>o.Shipper);var list=orders.OrderBy(x=>x.Customer.ContactName);返回视图(list.ToList());但是我确信这个查询是不好的,因为我遇到了异常。所以编辑你的问题,显示你尝试了什么,以及你遇到了什么异常。你没有让这变得容易。始终显示内部异常!o=>Customer.ContactName,当我尝试访问它时,它表示访问非静态字段Customer.ContactName需要对象引用。上面的代码是否有效,但您无法从o.ContactName读取?你能从类中读取其他属性吗?你在哪里读取这个属性?不行,当我尝试访问Customer.ContactName时,它说需要一个对象引用来访问非静态字段Customer.ContactName:var groupedOrders=orders.GroupBy(o=>Customer.ContactName,o=>o);“我的模型”中有两个不同的类“订单”和“客户”。您必须显示更多的类才能获得更好的帮助。您提到模型中有2个类,但在选择订单时包含3个类。我在你的代码中遗漏了一些东西,需要查看问题才能解决它。
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
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);
}