C #에서는 세 개의 String 멤버 변수가있는 Note라는 클래스가 있다고 가정합니다.
public class Note
{
public string Title;
public string Author;
public string Text;
}
그리고 참고 유형 목록이 있습니다.
List<Note> Notes = new List<Note>();
저자 열에서 모든 고유 값 목록을 얻는 가장 깨끗한 방법은 무엇입니까?
목록을 반복하고 다른 문자열 목록에 중복되지 않는 모든 값을 추가 할 수는 있지만 더럽고 비효율적입니다. 한 줄에 이것을 할 마법의 Linq 구조가 있다고 생각하지만 아무것도 만들 수 없었습니다.
답변
Notes.Select(x => x.Author).Distinct();
고유 값당 하나씩 일련 IEnumerable<string>
의 Author
값 ( )을 반환 합니다.
답변
저자별 노트 클래스 구분
var DistinctItems = Note.GroupBy(x => x.Author).Select(y => y.First());
foreach(var item in DistinctItems)
{
//Add to other List
}
답변
Jon Skeet은 운영자 가있는 morelinq 라는 라이브러리를 작성했습니다 DistinctBy()
. 구현에 대해서는 여기 를 참조 하십시오 . 코드는 다음과 같습니다
IEnumerable<Note> distinctNotes = Notes.DistinctBy(note => note.Author);
업데이트 :
질문을 다시 읽은 후 Kirk는 다른 저자를 찾고 있다면 정답을 얻습니다.
DistinctBy에 몇 가지 필드 샘플이 추가되었습니다.
res = res.DistinctBy(i => i.Name).DistinctBy(i => i.ProductId).ToList();
답변
public class KeyNote
{
public long KeyNoteId { get; set; }
public long CourseId { get; set; }
public string CourseName { get; set; }
public string Note { get; set; }
public DateTime CreatedDate { get; set; }
}
public List<KeyNote> KeyNotes { get; set; }
public List<RefCourse> GetCourses { get; set; }
List<RefCourse> courses = KeyNotes.Select(x => new RefCourse { CourseId = x.CourseId, Name = x.CourseName }).Distinct().ToList();
위의 논리를 사용하면 고유 한 것을 얻을 수 있습니다 Course
.
답변
mcilist = (from mci in mcilist select mci).Distinct().ToList();