Linq 쿼리 그룹화 및 첫 번째 항목 선택
다음과 같은 String 배열이 있습니다.
// icon, category, tool
String[,] subButtonData = new String[,]
{
{"graphics/gui/brushsizeplus_icon", "Draw", "DrawBrushPlus"},
{"graphics/gui/brushsizeminus_icon", "Draw", "DrawBrushMinus"},
{"graphics/gui/freedraw_icon", "Draw", "DrawFree"},
{"graphics/gui/linedraw_icon", "Draw", "DrawLine"},
{"graphics/gui/rectangledraw_icon", "Draw", "DrawRectangle"},
{"graphics/gui/ellipsedraw_icon", "Draw", "DrawEllipse"},
{"graphics/gui/brushsizeplus_icon", "Brusher", "BrusherBrushPlus"},
{"graphics/gui/brushsizeminus_icon", "Brusher", "BrusherBrushMinus"},
{"graphics/gui/brushsizeplus_icon", "Text", "TextBrushPlus"},
{"graphics/gui/brushsizeminus_icon", "Text", "TextBrushMinus"},
};
그런 다음 List<Button>
버튼 유형을mainButtons
이것이 내가 그룹화를 쿼리하는 방법입니다 Category
.
var categories = from b in mainButtons
group b by b.category into g
select new { Category = g.Key, Buttons = g };
메인 목록에서 각 그룹의 첫 번째 항목을 어떻게 선택할 수 있습니까? (각각을 반복하고 다른 목록에 추가하지 않고?)
LINQ : Group by 절을 사용하여 최신 / 마지막 레코드를 가져 오는 방법을 참조하세요 .
var firstItemsInGroup = from b in mainButtons
group b by b.category into g
select g.First();
mainButtons가 이미 올바르게 정렬되었다고 가정합니다.
사용자 지정 정렬 순서를 지정해야하는 경우 Comparer와 함께 OrderBy 재정의를 사용합니다.
var firstsByCompareInGroups = from p in rows
group p by p.ID into grp
select grp.OrderBy(a => a, new CompareRows()).First();
내 게시물 "Select First Row In Group using Custom Comparer " 의 예를 참조하십시오.
var result = list.GroupBy(x => x.Category).Select(x => x.First())
var results = list.GroupBy(x => x.Category)
.Select(g => g.OrderBy(x => x.SortByProp).FirstOrDefault());
반드시 올바르게 정렬 되지 않은 그룹에 대해이 작업을 수행하는 방법을 궁금해하는 사람들 을 위해 메서드 구문을 사용하여 각 그룹의 정렬 순서를 사용자 지정하여 각각에서 원하는 레코드를 가져 오는 이 답변 의 확장 이 있습니다.
참고 : LINQ-to-Entities를 사용하는 경우 여기에서 FirstOrDefault () 대신 First ()를 사용하면 전자가 최종 쿼리 작업으로 만 사용될 수 있으므로 런타임 예외가 발생합니다.
우선, 저는 다차원 배열을 사용하지 않을 것입니다. 나쁜 일이 발생하는 것을 본 적이 없습니다.
다음과 같이 변수를 설정하십시오.
IEnumerable<IEnumerable<string>> data = new[] {
new[]{"...", "...", "..."},
... etc ...
};
그런 다음 간단히 이동합니다.
var firsts = data.Select(x => x.FirstOrDefault()).Where(x => x != null);
Where는 내부 항목으로 빈 목록이있는 경우 null을 제거합니다.
또는 다음과 같이 구현할 수 있습니다.
string[][] = new[] {
new[]{"...","...","..."},
new[]{"...","...","..."},
... etc ...
};
이것은 [x,y]
배열 과 유사하게 사용할 수 있지만 다음과 같이 사용됩니다.[x][y]
ReferenceURL : https://stackoverflow.com/questions/6963707/linq-query-group-by-and-selecting-first-items
'code' 카테고리의 다른 글
PHP 5 Reflection API 성능 (0) | 2020.12.27 |
---|---|
PowerShell 루프에서 현재 항목의 인덱스 가져 오기 (0) | 2020.12.27 |
페이지 조각 사이의 Android ViewPager 패딩 / 여백 (0) | 2020.12.27 |
ViewDidLoad에서 Segue 수행 (0) | 2020.12.27 |
버튼 누름을 기반으로 UIPickerView (새 데이터 배열 포함)를 어떻게 다시로드 / 새로 고침합니까? (0) | 2020.12.27 |