c# - 可以写这样的东西吗?

标签 c# linq

我可以做这样的事情吗?:

     public class Customer
            {
                public int cid { get; set; }
                public string FirstName { get; set; }
                public string LastName { get; set; }
                public string City { get; set; }

     public class Order
        {
            public int Orderid { get; set; }
            public int customerid { get; set; }
            public int Quantity { get; set; }
        }



     static void Main(string[] args)
        {

            List<Customer> customerList = new List<Customer>
            {
              new Customer(){cid=1,FirstName="Avinash",LastName="Kothamasu",City="Chennai"},
              new Customer(){cid=2,FirstName="Abhiram",LastName="Kumar",City="Chennai"},
          new Customer{cid=3,FirstName="Balu",LastName="Chinna",City="Chennai"},
          new Customer{cid=4,FirstName="Sai",LastName="Kothamasu",City="Bhimavaram"},
          new Customer{cid=5,FirstName="Harshita",LastName="Kothamasu",City="Bhimarvarm"},
          new Customer{cid=6,FirstName="Mounika",LastName="Kothamasu",City="Guntur"}
        };

        List<Order> orderList = new List<Order>
        {
            new Order(){Orderid=11,customerid=1,Quantity=20},
            new Order(){Orderid=111,customerid=1,Quantity=10},
            new Order(){Orderid=22,customerid=2,Quantity=15},
            new Order(){Orderid=222,customerid=2,Quantity=8},
            new Order(){Orderid=22222,customerid=2,Quantity=50},
            new Order(){Orderid=33,customerid=3,Quantity=10},
            new Order(){Orderid=333,customerid=3,Quantity=5},
            new Order(){Orderid=44,customerid=4,Quantity=4},
            new Order(){Orderid=55,customerid=5,Quantity=1},
            new Order(){Orderid=66,customerid=6,Quantity=49}
        };


        var OrderListforCustomers = (from c in customerList
                                    join o in orderList on
                                    c.cid equals o.customerid
                                    where o.Quantity >= 1 && o.Quantity <= 50
                                    group new { c, o } by new { o.customerid, c.FirstName, c.LastName, c.City } into customergroups
                                    orderby customergroups.Select(x => x.o).Max(x => x.Quantity) descending, customergroups.Key.customerid descending
                                    select new 
                                        {
                                            CustomerID = customergroups.Key.customerid,
                                            CustomerName = customergroups.Key.FirstName.ToUpper() + " , " + customergroups.Key.LastName.ToUpper(),
                                            City = customergroups.Key.City,
                                            MaximumQuantityCount = customergroups.Select(x => x.o).Max(x => x.Quantity),
                                            OrderIDWithMaxCount = customergroups.Select(x => x.o).OrderByDescending(x => x.Quantity).Select(x => x.Orderid).FirstOrDefault()
                                        } into result).Take(6); // Error here

        Console.Write("CID" + " || ");
        Console.Write("CustomerName" + " || ");
        Console.Write("City" + " | ");
        Console.Write("MaximumQuantityCount" + " || ");
        Console.Write("OrderIDwithMaxQuantityCount");
        Console.WriteLine(Environment.NewLine);

        foreach (var custgroup in limOrderListCust)
        {
            Console.Write(custgroup.CustomerID + " || ");
            Console.Write(custgroup.CustomerName + " || ");
            Console.Write(custgroup.City + " || ");
            Console.Write(custgroup.MaximumQuantityCount + " || ");
            Console.Write(custgroup.OrderIDWithMaxCount);
            Console.Write(Environment.NewLine);
        }

        Console.ReadLine();

我只想从查询结果数据中检索前 6 条记录。

我可以写一些类似的东西:

var topdata=OrderListforCustomers .Take(6);

但是,我只想在单个查询中获取结果。

更新:

我收到错误:

A query body must end with a select clause or a group clause    

请推荐

最佳答案

只需删除 into result 子句,仅在延续时需要它。

查询表达式的语法详细信息参见 http://msdn.microsoft.com/en-us/library/bb308959.aspx .

以下是相关部分:

query-expression ::= from-clause query-body

query-body ::= query-body-clause* final-query-clause query-continuation?

query-continuation ::= into itemName query-body

如您所见,into 结果 后面必须跟有查询正文才能有效。

关于c# - 可以写这样的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904658/

相关文章:

c# - 如何对 SQLite 数据库进行 LINQ 查询?

c# linq 如果项目在列表中并从列表中获取匹配项目

c# - 如何序列化原始 json 字段?

c# - Powershell 使用来自 Add-Type 的 C# 代码使 shell 崩溃 (SystemParamtersInfo)

c# - Directory.Copy 失败,因为 *.mdf 正在被 C# 中的另一个进程访问

c# - 如何在不转换为字符串的情况下将两位数添加到整数的末尾?

c# - 如何在WPF中的鼠标双击事件中获取datagrid中的cellvalue

ASP.net 4.0 实体数据模型 Mysql 未正确处理 Mysql 枚举

c# - 将 gridview 与海量数据绑定(bind)时出现性能问题

c# - 如何使用 LINQ 从通用列表中获取下一个合适的值?