2017-12-17 19 views
2

를 무시 삭제할 목록을 작성하고 새 목록을 얻으십시오. 내 코드 :Linq에 중복 =이 {사과, 오렌지, 수박, 사과, 오렌지, 사과}</p> </blockquote> <p>내가 그것과 중복을 삭제하려면 나는이</p> <blockquote> <p>var에 유사한 예를 들어 목록 데이터가있는 경우

var b = a.GroupBy(x => x).Where(y => y.Count() >= 1).Select(z => z.Key).ToList(); 

있지만

VAR (B)가 = {애플, 사과, 사과, 오렌지, 수박}

방법이 서로 다른 경우 제거로 돌아갑니다? 엑셀의 필터링 시스템처럼 1 개의 애플 만 얻는다.

a.GroupBy(x => x, StringComparer.OrdinalIgnoreCase).Select... 

CurrentCultureIgnoreCase, InvariantCultureIgnoreCaseOrdinalIgnoreCase을 포함하여 가능한 여러 옵션이 있습니다 IEqualityComparer<T>는 StringComparer이 구현 및 표준 미리 구성된 옵션을 제공하는 경우

답변

2

GroupBy은 구현을 받아들입니다.

자세한 내용 :

using System.Linq; 
using System; 

public class Program 
{ 
    public static void Main() 
    { 
     var a = new[]{"Apple", "Orange", "WaterMelon", "ApplE", "Orange", "APple"}; 
     var b = a.Where(x => a.Count(i => i.Equals(x, StringComparison.OrdinalIgnoreCase)) == 1); 

     System.Console.WriteLine(string.Join(",", b)); 
    } 
} 

출력 (대소 문자 구분) : 당신이 케이스를 존중하지 않고 그들을 얻고 싶은 경우에

// using System.Linq; 

var a = new[]{"Apple", "Orange", "WaterMelon", "ApplE", "Orange", "APple"}; 
var b = a.Where(x => a.Count(i => i == x) == 1); 

: https://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase(v=vs.110).aspx

+0

좋습니다. 감사. 하지만 GroupBy에서 구현을 추가 할 수 있다는 것을 알았습니다. 또 다른 기능입니까? –

+0

IEqualityComparer를 구현하는 모든 함수 또는 대리자 . 이것을 EntityFramework 나 다른 Linq 프로 바이더에 전달하면 프레임 워크의 기본 구현 중 일부를 고수하는 것이 가장 좋습니다. – jessehouwing

0

이 케이스 존중을 필터링합니다

Apple,WaterMelon,ApplE,APple 

출력 (문자 구분) :

WaterMelon 
-1

당신은 문자열로 키와 값으로 문자열을 낮추기 위해 추가 사전을 사용할 수 있습니다.

List<string> mylist = new List<string> { "app", "App", "zz", "zZ" }; 
      Dictionary<string, string> dict = new Dictionary<string, string>(); 
      string key = string.Empty; 
      foreach(string c in mylist) 
      { 
       key = c.ToLower(); 
       if(!dict.Keys.Contains(key)) 
       { 
        dict.Add(key, c); 
       } 
      } 
      var t = dict.Values;