2013-06-22 37 views
0

你好,我正在尝试绑定一个GridView与数据库中不同的行。我想要在JobID列上执行distict。请帮助根据一列在Gridview中获取不同的行

using (ATPDataContext at = new ATPDataContext()) 

     { 
      var qryPartnerJobs = (from pj in at.jobs 
           join jq in at.job_quotes on pj.JobID equals jq.JobID 
           join u in at.users on jq.TradeUserID equals u.UserID 
           where pj.IsApproved == true 
           select new 
           { 
            JobID = pj.JobID, 
            FirstName = u.FirstName, 
            ServiceName = pj.service.ServiceName, 
            ServiceTypeName = pj.service_type.ServiceTypeName, 
            IsApproved = pj.IsApproved, 
            IsActive = pj.IsActive, 
            IsQuoted = pj.IsQuoted, 
            IsAssigned = pj.IsAssigned, 
            ApprovalDate = pj.ApprovalDate, 
            Description = pj.Description 
           }).Distinct(); 

      gvPartnerJob.DataSource = qryPartnerJobs; 
      gvPartnerJob.DataBind(); 

     } 

回答

0

Distinct接受EqualityComparer<T>作为参数。有了这个比较器

public class JobComparer : EqualityComparer<Job> 
{ 
    public override bool Equals(Job x, Job y) 
    { 
     return x.JobID == y.JobID; 
    } 

    public override int GetHashCode(Job obj) 
    { 
     return obj.JobID.GetHashCode(); 
    } 
} 

,只需在您的收藏使用Distinct(new JobComparer()):您可以通过下面的比较器实现请求的功能。

0

如果你想在不同在SQL中进行,使用的GroupBy()

 var qryPartnerJobs = (from pj in at.jobs 
          join jq in at.job_quotes on pj.JobID equals jq.JobID 
          join u in at.users on jq.TradeUserID equals u.UserID 
          where pj.IsApproved == true 
          select new 
          { 
           JobID = pj.JobID, 
           FirstName = u.FirstName, 
           ServiceName = pj.service.ServiceName, 
           ServiceTypeName = pj.service_type.ServiceTypeName, 
           IsApproved = pj.IsApproved, 
           IsActive = pj.IsActive, 
           IsQuoted = pj.IsQuoted, 
           IsAssigned = pj.IsAssigned, 
           ApprovalDate = pj.ApprovalDate, 
           Description = pj.Description 
          }) 
          // get a group for each distinct jobId 
          .GroupBy(t => t.JobID) 
          // select the first entry from each group 
          .SelectMany(g => g.Take(1)); 

如果您想为不同的操作在内存中,而不是执行,你可以使用DISTINCT()超载允许您传递IEqualityComparer。

相关问题