过滤字符串列表,并仅选择一个出现多次的字符串

时间:2019-12-13 14:05:53

标签: c# .net linq

  var paymentTypes = _context
    .BursaryTransactions
    .Select(c => c.PaymentType)
    .ToList();

  string[] obj = paymentTypes
    .ToArray();

  var a = obj[1];

第一行从BursaryTransactions表中检索字符串形式的付款类型列表 第二行将列表转换为数组。

但是第一行中的列表包含类似的字符串

  
      
  1. 邮寄主题
  2.   
  3. 学费
  4.   
  5. 学费
  6.   
  7. 邮寄给我
  8.   
  9. Hnd表格
  10.   
  11. Hnd表格
  12.   

我想过滤这些列表并仅检索出现一次以上的项目的一次出现。然后将新列表转换为数组。

2 个答案:

答案 0 :(得分:4)

您可以尝试GroupBy并选择项目多于1的组:

   var result = _context
     .BursaryTransactions
     .GroupBy(c => c.PaymentType)        // Group By PaymentType
     .Where(group => group.Count() > 1)  // groups with more than 1 item
     .Select(group => group.First())     // we want just the 1st item of such group 
     .ToList();                          // materialized as a List<T>

编辑删除重复项,我们可以从每个First中提取group个项目:

   var result = _context
     .BursaryTransactions
     .GroupBy(c => c.PaymentType)
     .Select(group => group.First()) // First().PaymentType if you want PaymentType only
     .ToList();

答案 1 :(得分:0)

您可以尝试这种方式

var result = _context.BursaryTransactions.GroupBy(c => c.PaymentType)
     .Where(g => g.Count() > 1)
     .Select(g => g.First())
     .ToArray();