如何使用linq从表中获取最大字符串长度列行?

时间:2016-09-28 09:17:49

标签: c# linq

我有一个像下图这样的表,有两列“cas”和“pref”,你可以看到“cas”列中有常见的值,所以我想按“cas”分组并只获取那些有的行使用c#中的Linq在“pref”列中的最大字符串长度。

输入表:

enter image description here

必需输出:

enter image description here

我正在使用以下查询来获取sql中的上部所需输出但是如何通过LINQ执行此操作?

select cas, (select top 1 pref from pdf_tab b where b.cas = a.cas order by LEN(pref) desc )
       from pdf_tab a group by cas

5 个答案:

答案 0 :(得分:1)

这应该有效:

var results = yourTable.GroupBy(x => x.cas).Select(g => g.OrderByDescending(og => og.pref.Length).First());

答案 1 :(得分:1)

这将返回每组中最长的元素:

] (+ 1 2 (* 4 5))
23
] +
#<procedure:+>
] 1
1
] 2
2
] (#%app * '4 '5)
20
] *
#<procedure:*>
] 4
4
] 5
5
] (+ 1 2 (* 4 5))
23

答案 2 :(得分:1)

我认为数据结构是这样的:

class Data
{
   public int cas {get;set;
   public string pref {get;set;}
}  

and some record:

List<Data> records;

因为你说的是​​C#和LINQ,所以必须这样:)。

从那里很简单:

List<Data> newRecords =
records
.GrouBy(data => data.cas)
.Select(gData => gData
                 .OrderBy(x => x?.pref?.Length ?? 0)
                 .LastOrDefault())
.Where(data => data != null)
.ToList()
 ;

答案 3 :(得分:0)

var results = from p in tablename
          group p by p.cas into g
          order by g.Key
          select new { cas = g.Key, maximum = 
g.First(r => r.pref.Length == g.Max(y => y.pref.Length)) };

答案 4 :(得分:0)

您可以从表格中按照 Pref 属性的长度对所有数据进行排序,将它们按 Cas 值分组,然后只获取每个组中的第一个元素

var result = from p in table
             orderby p.Pref.Length descending
             group p by p.Cas into g
             select g.First();