我可以做这样的事情吗?:
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/