LINQ SELECT每次行1次

时间:2014-01-24 06:38:03

标签: c# linq

如何选择linq中每列仅返回1行的每个数据1。因为当我把.Take(1)只会出现1行结果但我想要有不同条目的2行结果

明确这里我的意思是enter image description here

在c#这里是我的查询

using (PharmacyDBEntities entities = new PharmacyDBEntities())
        {
            var positem = (from a in entities.POSEntries.Take(1)
                          where a.Invoice.AccountID == authLogin.userid && a.Invoice.InvoiceStatusID == 1
                          select new
                          {
                              a.Item.ItemCode,
                              a.Item.Name,
                              Quantity = (from b in entities.POSEntries where b.Invoice.AccountID == authLogin.userid && b.Invoice.InvoiceStatusID == 1 select b).Count(),
                              a.Item.SellingPrice
                          }).ToList();
            gcItemList.DataSource = positem;
        }

结果 enter image description here

有什么建议吗?会给我很大的帮助。感谢

3 个答案:

答案 0 :(得分:1)

您可以使用Linq GroupBy

var positem = entities.POSEntries.Where( a=> a.Invoice.AccountID == authLogin.userid && a.Invoice.InvoiceStatusID == 1)
               .GroupBy(x=>x.Item.ItemCode).Select(g=> new {
                              g.Key,
                              g.First().Item.Name,
                              Quantity = g.Count(),
                              g.First().Item.SellingPrice
                          }).ToList();

答案 1 :(得分:0)

只返回前n个元素。我认为您需要尝试使用Distinct方法。

答案 2 :(得分:0)

那么,你想要Distinct()而不是Take(1)吗?这些方面的东西:

var positem = (from a in entities.POSEntries
    where a.Invoice.AccountID == authLogin.userid && a.Invoice.InvoiceStatusID == 1
                      select new
                      {
                          a.Item.ItemCode,
                          a.Item.Name,
                          Quantity = (from b in entities.POSEntries where b.Invoice.AccountID == authLogin.userid && b.Invoice.InvoiceStatusID == 1 select b).Count(),
                          a.Item.SellingPrice
                      }).Distinct().ToList();