LINQ 分组取第一条的写法

时间:2022-07-19 15:08:43
相当于SQL中的这种写法


SELECT  *
FROM    ( SELECT    * ,
                    r = ROW_NUMBER() OVER ( PARTITION BY MobilePhone ORDER BY MobilePhone )
          FROM      dbo.v_candidates
        ) t
WHERE   t.r = 1



这么说吧我有一张表  其中手机号码 相同的 我只取排序后的第一条   ,只要手机这个字段相同 其他相不相不同管我只取第一条。

10 个解决方案

#1


最好用LINQ TO OBJECT 不喜欢TO SQL

#2



List<items> gcs = GetItems();
var gs = from g in gcs
         group g by g.store_id into g
         select g;
var model=gs.Where(m=>m.tel=='111111').FirstOrDefault();
if(model!=null)

#3


v_candidates.GroupBy(p=>p.MobilePhone).FirstOrDefault();

#4


引用 3 楼 lu*g741cs 的回复:
v_candidates.GroupBy(p=>p.MobilePhone).FirstOrDefault();
 你这个明显不对啊

#5


var query=v_candidates.GroupBy(p=>p.MobilePhone)
                      .Select(s=>s.OrderBy(o=>o.MobilePhone).FirstOrDefault()); 

#6


引用 5 楼 claymore1114 的回复:
var query=v_candidates.GroupBy(p=>p.MobilePhone)
                      .Select(s=>s.OrderBy(o=>o.MobilePhone).FirstOrDefault()); 


我要的结果是个LIST<v_candidates> 的结果集。。你这个明显不对。

#7


这个你应该用Disctinct而不是group by


LIST<v_candidates>  list;
list=list.Distinct(new v_candidatesComparer()).ToList();


public class v_candidatesComparer : IEqualityComparer<v_candidates>  
    {  
        public bool Equals(v_candidates t1, v_candidates t2)  
        {  
            return (t1.MobilePhone == t2.MobilePhone);  
        }  
        public int GetHashCode(v_candidates t)  
        {  
            return t.ToString().GetHashCode();  
        }  
    }  

#8


本帖最后由 q107770540 于 2014-02-20 15:14:50 编辑
http://blog.csdn.net/q107770540/article/details/5784646


#9


引用 6 楼 jhl52771 的回复:
Quote: 引用 5 楼 claymore1114 的回复:

var query=v_candidates.GroupBy(p=>p.MobilePhone)
                      .Select(s=>s.OrderBy(o=>o.MobilePhone).FirstOrDefault()); 


我要的结果是个LIST<v_candidates> 的结果集。。你这个明显不对。

select后面 加个 ToList就行啊
List<v_candidates> query=....ToList();

#10


 定义LIST<..>

  
 public IList<..> GetList()
 ver query = v_candidates.ToList().OrderbyDescending( o = > o.MobilePhone).ToList();

#1


最好用LINQ TO OBJECT 不喜欢TO SQL

#2



List<items> gcs = GetItems();
var gs = from g in gcs
         group g by g.store_id into g
         select g;
var model=gs.Where(m=>m.tel=='111111').FirstOrDefault();
if(model!=null)

#3


v_candidates.GroupBy(p=>p.MobilePhone).FirstOrDefault();

#4


引用 3 楼 lu*g741cs 的回复:
v_candidates.GroupBy(p=>p.MobilePhone).FirstOrDefault();
 你这个明显不对啊

#5


var query=v_candidates.GroupBy(p=>p.MobilePhone)
                      .Select(s=>s.OrderBy(o=>o.MobilePhone).FirstOrDefault()); 

#6


引用 5 楼 claymore1114 的回复:
var query=v_candidates.GroupBy(p=>p.MobilePhone)
                      .Select(s=>s.OrderBy(o=>o.MobilePhone).FirstOrDefault()); 


我要的结果是个LIST<v_candidates> 的结果集。。你这个明显不对。

#7


这个你应该用Disctinct而不是group by


LIST<v_candidates>  list;
list=list.Distinct(new v_candidatesComparer()).ToList();


public class v_candidatesComparer : IEqualityComparer<v_candidates>  
    {  
        public bool Equals(v_candidates t1, v_candidates t2)  
        {  
            return (t1.MobilePhone == t2.MobilePhone);  
        }  
        public int GetHashCode(v_candidates t)  
        {  
            return t.ToString().GetHashCode();  
        }  
    }  

#8


本帖最后由 q107770540 于 2014-02-20 15:14:50 编辑
http://blog.csdn.net/q107770540/article/details/5784646


#9


引用 6 楼 jhl52771 的回复:
Quote: 引用 5 楼 claymore1114 的回复:

var query=v_candidates.GroupBy(p=>p.MobilePhone)
                      .Select(s=>s.OrderBy(o=>o.MobilePhone).FirstOrDefault()); 


我要的结果是个LIST<v_candidates> 的结果集。。你这个明显不对。

select后面 加个 ToList就行啊
List<v_candidates> query=....ToList();

#10


 定义LIST<..>

  
 public IList<..> GetList()
 ver query = v_candidates.ToList().OrderbyDescending( o = > o.MobilePhone).ToList();