簡體   English   中英

在linq中獲取多個不同的分組值

[英]Getting multiple Distinct grouped values in linq

一直未能專門找到,回答我的問題..

我需要獲得一個顯示的結果:項目名稱ONCE,以及​​在給定日期范圍timeEntries該項目上創建了timeEntries所有用戶。

而且我還需要獲得timeEntrieshoursEntered ),這樣我就可以計算出總共花了多少小時。

我是新手,所以我希望我提供了足夠的信息..

我的代碼:

var dateStart = new DateTime (2016,09,01);
var dateEnd   = new DateTime (2016,09,19);

var query = (from timeEntry in TimeEntries
        join task in Tasks on timeEntry.TaskID equals task.TaskID
        join project in Projects on task.ProjectID equals project.ProjectID
        where timeEntry.DateEntity >= dateStart && timeEntry.DateEntity <= dateEnd
        select new {
        User = timeEntry.User.FirstName + " "+timeEntry.User.LastName,
        Project = timeEntry.Task.Project.ProjectName,
        ProjectId = timeEntry.Task.ProjectID,
        HoursEntered = timeEntry.HoursEntered
        }).GroupBy (q => q.Project).Distinct();

我有4張桌子:

  • 項目(ProjectID,ProjectName)
  • 任務(TaskID,ProjectID)
  • TimeEntries(HoursEntered,DateEntity,TaskID)
  • 用戶(FirstName,LastName)
var query =
  from timeEntry in TimeEntries
  where timeEntry.DateEntity >= dateStart && timeEntry.DateEntity <= dateEnd
  select new {
    User = timeEntry.User.FirstName + " "+timeEntry.User.LastName,
    Project = timeEntry.Task.Project.ProjectName,
    ProjectId = timeEntry.Task.ProjectID,
    HoursEntered = timeEntry.HoursEntered
  }

var localRows = query.ToList();

var groups = localRows.GroupBy(x => x.Project);

var projects = groups.Select(g => new {
  Project = g.Key,
  Hours = g.Sum(x => x.HoursEntered),
  Users = g.Select(x => x.User).Distinct().ToList()
}).ToList();

也許與:

var query = (from timeEntry in TimeEntries
        join task in Tasks on timeEntry.TaskID equals task.TaskID
        join project in Projects on task.ProjectID equals project.ProjectID
        where timeEntry.DateEntity >= dateStart && timeEntry.DateEntity <= dateEnd
        group timeEntry by new { proyect.ProjectID, proyect.ProjectName } into g
        select new {
        TimeEntries = g.ToArray(),
        Project = g.Key.ProjectName ,
        ProjectId = g.Key.ProjectID,
        HoursEntered = g.Sum(e => e.HoursEntered)
        });

我需要更多信息來調整它,但我認為這應該對你有幫助。 我是在瀏覽時做的,所以mybe你需要檢查名字。

在LINQ分組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM