创建仅包含每个条目之一的列表

时间:2012-12-14 17:18:08

标签: c# asp.net-mvc-3

我有一个例程,我正在访问数据库中的表并从数据创建模型。

数据库表TblUNote

      ID      Quarter      Year      SubID      Data
       1          1        2007       245      DataPoint1
       2          1        2007       245      Datapoint2
       3          1        2007       245      Datapoint3
       4          1        2007       247      DataPoint1
       5          1        2007       247      Datapoint2
       6          1        2007       247      Datapoint3
       7          1        2007       249      DataPoint1
       8          1        2007       249      Datapoint2

例行程序

       public RData[] GetData(int Q, int Y)
       {
          using (Entities be = new Entities())
          {
             List<RData> nlist = new List<RData>();

             List<TblUNote> info = be.TblUNotes.Where(a => a.Quarter == Q && a.Year == Y).ToList();
             foreach (var item in info)
             {
                 Rdata newmodel = new RData()
                 {
                    //create model
                 };
             }
             nlist.Add(newmodel);
          }
          return(nlist).ToArray();
       }

这有效,但现在我需要修改它,以便只为每个SubID创建一个模型条目。我尝试过使用.Distinct(),但我得到了相同的数据。我尝试使用.First()但无论我把它放在数据库调用中的什么地方,我都会收到错误。我需要模型列表

               RData Model

     Item1    Quarter = 1,   Year = 2007,  SubID = 245,   Data = DataPoint1
     Item2    Quarter = 1,   Year = 2007,  SubID = 247,   Data = DataPoint1
     Item3    Quarter = 1,   Year = 2007,  SubID = 249,   Data = DataPoint1

问题是我无法将SubID与之比较。我想.Distinct()会给我一个方法来做到这一点。我确信。首先应该如何将其集成到数据库调用中。

1 个答案:

答案 0 :(得分:1)

您可以使用GroupBy,并获取每个组的第一项:

be.TblUNotes
  .Where(a => a.Quarter == Q && a.Year == Y)
  .GroupBy(m => m.SubId)
  .Select(g => g.FirstOrDefault())//or g.OrderBy(m => m.Data).FirstOrDefault(), for example, I don't know which item you wanna take
  .ToList();