2013-03-18 2 views
0

MVC3을 Entity 프레임 워크와 함께 사용하고있었습니다. 이번에는 목록에 고유 항목을 만들고 싶습니다. 여기에 내 물건 목록이 있습니다.C# 목록의 고유 값

목록 위의 목록 중

1.Overdue-1 
2.Overdue-M 
3.ItemsDue-1 
4.ItemsDue-5 

, 난 그냥 또한

1.Overdue 
2.Itemsdue 

,이 목록을 얻기 위해 필터링 싶어, 나는 DropDownList로 연체 또는이 일을해야 항목 드롭 다운 텍스트 필드 & 1에서 n을 값 필드로 사용합니다. 나는 이것을 시도했다. 하지만 드롭 다운 및 고유 목록에 대한 논리를 수행 할 수 있습니다.

코드

var select = (from asd in db.Sys 
         select new EmailTemp 
         { 
          SysCode = asd.Code, 
          SysmailId = asd.Id 
         }).Distinct().ToList(); 
     List<EmailTemp> filterlist = new List<EmailTemp>(); 
     foreach (var a in select) 
     { 
      string lates = a.SysCode; 
      var ind = lates.IndexOf("-"); 
      if (ind > 0) 
      { 
       a.SysCode = lates.Substring(0, ind); 
       a.SysmailId = a.SysmailId; 
       filterlist.Add(a); 
      } 
      else 
      { 
       a.SysCode = lates; 
       a.SysmailId = a.SysmailId; 
       filterlist.Add(a); 
      } 
     } 
     //var idlist = filterlist.Distinct().ToList(); 
     ViewBag.SysMailType = new SelectList(filterlist.Distinct().ToList(), "SysmailId", "SysCode"); 

Pls는 그 누구도 날 난 내 논리를 달성하기 위해 코드를 기록 할 수있는 가능성을 말한다.

감사

답변

0

사용자 지정 equality comparer을 만들고 Distinct를 사용하여 항목을 비교하는 것을 사용할 수 있습니다.

class MyEqualityComparer: EqualityComparer<EmailTemp> 
{ 
    private string GetPrefix(string s) 
    { 
     var pos = sIndexOf("-"); 
     var rslt = (pos > 0) ? s.SubString(0, pos) : s; 
     return rslt; 
    } 

    public override bool Equals(EmailTemp t1, EmailTemp t2) 
    { 
     var s1 = GetPrefix(t1.SysCode); 
     var s2 = GetPrefix(t2.SysCode); 
     return s1.Equals(s2); 
    } 

    public override int GetHashCode(EmailTemp t1) 
    { 
     return GetPrefix(t1.SysCode).GetHashCode(); 
    } 
} 

그리고는, 고유 항목의 목록을 생성합니다 :

List<EmailTemp> filterList = select.Distinct(new MyEqualityComparer()).ToList(); 

아마 첫 번째 LINQ 표현과 그 결합하는 방법이있다. 아마도 다른 사람이 안으로 들어올 것입니다.