0

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

数据库表 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() 会给我一种方法来做到这一点。我确信 .First 应该但是如何将它集成到数据库调用中。

4

1 回答 1

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();
于 2012-12-14T17:22:09.590 回答