public List <T> GetSortedCollection <T>(ICollection <T> InputCollection, SortTarget?Target, SortDirection?Direction) where T : FileSystemStorageItemBase { SortTarget TempTarget = Target ?? SortTarget; SortDirection TempDirection = Direction ?? SortDirection; IEnumerable <T> FolderList = InputCollection.Where((It) => It.StorageType == StorageItemTypes.Folder); IEnumerable <T> FileList = InputCollection.Where((It) => It.StorageType == StorageItemTypes.File); switch (TempTarget) { case SortTarget.Name: { return(TempDirection == SortDirection.Ascending ? new List <T>(FolderList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection).Concat(FileList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection))) : new List <T>(FileList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection).Concat(FolderList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection)))); } case SortTarget.Type: { return(TempDirection == SortDirection.Ascending ? new List <T>(FolderList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection).Concat(FileList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection))) : new List <T>(FileList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection).Concat(FolderList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection)))); } case SortTarget.ModifiedTime: { return(TempDirection == SortDirection.Ascending ? new List <T>(FolderList.OrderBy((Item) => Item.ModifiedTimeRaw).Concat(FileList.OrderBy((Item) => Item.ModifiedTimeRaw))) : new List <T>(FileList.OrderByDescending((Item) => Item.ModifiedTimeRaw).Concat(FolderList.OrderByDescending((Item) => Item.ModifiedTimeRaw)))); } case SortTarget.Size: { return(TempDirection == SortDirection.Ascending ? new List <T>(FolderList.OrderBy((Item) => Item.SizeRaw).Concat(FileList.OrderBy((Item) => Item.SizeRaw))) : new List <T>(FileList.OrderByDescending((Item) => Item.SizeRaw).Concat(FolderList.OrderByDescending((Item) => Item.SizeRaw)))); } case SortTarget.Path: { return(TempDirection == SortDirection.Ascending ? new List <T>(FolderList.OrderBy((Item) => Item.Path).Concat(FileList.OrderBy((Item) => Item.SizeRaw))) : new List <T>(FileList.OrderByDescending((Item) => Item.Path).Concat(FolderList.OrderByDescending((Item) => Item.SizeRaw)))); } default: { if (typeof(T) == typeof(RecycleStorageItem)) { return(TempDirection == SortDirection.Ascending ? new List <T>(FolderList.Select((Item) => Item as RecycleStorageItem).OrderBy((Item) => Item.OriginPath).Concat(FileList.Select((Item) => Item as RecycleStorageItem).OrderBy((Item) => Item.OriginPath)).Select((Item) => Item as T)) : new List <T>(FolderList.Select((Item) => Item as RecycleStorageItem).OrderByDescending((Item) => Item.OriginPath).Concat(FileList.Select((Item) => Item as RecycleStorageItem).OrderByDescending((Item) => Item.OriginPath)).Select((Item) => Item as T))); } else { return(null); } } } }
public static void SetIndicatorStatus(SortTarget Target, SortDirection Direction) { foreach (SortIndicatorController Instance in CurrentInstance) { SetIndicatorCore(Instance, Target, Direction); } }
public IEnumerable <T> GetSortedCollection <T>(IEnumerable <T> InputCollection, SortTarget?Target, SortDirection?Direction) where T : IStorageItemPropertyBase { SortTarget TempTarget = Target ?? SortTarget; SortDirection TempDirection = Direction ?? SortDirection; IEnumerable <T> FolderList = InputCollection.Where((It) => It is FileSystemStorageFolder); IEnumerable <T> FileList = InputCollection.Where((It) => It is FileSystemStorageFile); switch (TempTarget) { case SortTarget.Name: { return(TempDirection == SortDirection.Ascending ? FolderList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection).Concat(FileList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection)) : FileList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection).Concat(FolderList.OrderByLikeFileSystem((Item) => Item.Name, TempDirection))); } case SortTarget.Type: { return(TempDirection == SortDirection.Ascending ? FolderList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection).Concat(FileList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection)) : FileList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection).Concat(FolderList.OrderByLikeFileSystem((Item) => Item.Type, TempDirection))); } case SortTarget.ModifiedTime: { return(TempDirection == SortDirection.Ascending ? FolderList.OrderBy((Item) => Item.ModifiedTimeRaw).Concat(FileList.OrderBy((Item) => Item.ModifiedTimeRaw)) : FileList.OrderByDescending((Item) => Item.ModifiedTimeRaw).Concat(FolderList.OrderByDescending((Item) => Item.ModifiedTimeRaw))); } case SortTarget.Size: { return(TempDirection == SortDirection.Ascending ? FolderList.OrderBy((Item) => Item.SizeRaw).Concat(FileList.OrderBy((Item) => Item.SizeRaw)) : FileList.OrderByDescending((Item) => Item.SizeRaw).Concat(FolderList.OrderByDescending((Item) => Item.SizeRaw))); } case SortTarget.Path: { return(TempDirection == SortDirection.Ascending ? FolderList.OrderBy((Item) => Item.Path).Concat(FileList.OrderBy((Item) => Item.SizeRaw)) : FileList.OrderByDescending((Item) => Item.Path).Concat(FolderList.OrderByDescending((Item) => Item.SizeRaw))); } default: { if (typeof(T) == typeof(IRecycleStorageItem)) { return(TempDirection == SortDirection.Ascending ? FolderList.OfType <IRecycleStorageItem>().OrderBy((Item) => Item.OriginPath).Concat(FileList.OfType <IRecycleStorageItem>().OrderBy((Item) => Item.OriginPath)).OfType <T>() : FolderList.OfType <IRecycleStorageItem>().OrderByDescending((Item) => Item.OriginPath).Concat(FileList.OfType <IRecycleStorageItem>().OrderByDescending((Item) => Item.OriginPath)).OfType <T>()); } else { return(null); } } } }
public PathConfiguration(string Path, SortTarget Target, SortDirection Direction) { if (string.IsNullOrWhiteSpace(Path)) { throw new ArgumentException("Argument could not be empty or white space", nameof(Path)); } this.Path = Path; this.SortDirection = Direction; this.SortTarget = Target; }
/// <summary>オプション指定して作成</summary> public SearchOption( SortOrder SortOrder, SortTarget SortTarget, PostTimeFilter PostTimeFilter, PlayTimeFilter PlayTimeFilter) { this.SortOrder = SortOrder; this.SortTarget = SortTarget; this.PostTimeFilter = PostTimeFilter; this.PlayTimeFilter = PlayTimeFilter; }
public PathConfiguration(string Path, int DisplayModeIndex, SortTarget SortColumn, SortDirection SortDirection) { if (string.IsNullOrWhiteSpace(Path)) { throw new ArgumentException("Argument could not be empty or white space", nameof(Path)); } this.Path = Path; this.DisplayModeIndex = DisplayModeIndex; this.SortDirection = SortDirection; this.SortColumn = SortColumn; }
private GetOption(ByteSequence endKey, long limit, long revision, SortOrder sortOrder, SortTarget sortTarget, bool serializable, bool keysOnly, bool countOnly) { this.endKey = endKey; this.limit = limit; this.revision = revision; this.sortOrder = sortOrder; this.sortTarget = sortTarget; this.serializable = serializable; this.keysOnly = keysOnly; this.countOnly = countOnly; }
public static void SavePathSortState(string Path, SortTarget Target, SortDirection Direction) { if (Target == SortTarget.OriginPath || Target == SortTarget.Path) { throw new NotSupportedException("SortTarget.Path and SortTarget.OriginPath is not allowed in this method"); } PathConfiguration CurrentConfiguration = SQLite.Current.GetPathConfiguration(Path); if (CurrentConfiguration.SortTarget != Target || CurrentConfiguration.SortDirection != Direction) { SQLite.Current.SetPathConfiguration(new PathConfiguration(Path, Target, Direction)); SortStateChanged?.Invoke(null, new SortStateChangedEventArgs(Path, Target, Direction)); } }
/// <summary> /// キーの取得 /// </summary> public static string ToKey(this SortTarget SortTarget) { switch (SortTarget) { case SortTarget.None: return("n"); case SortTarget.Comment: return("n"); case SortTarget.ViewCount: return("v"); case SortTarget.CommentCount: return("r"); case SortTarget.MylistCount: return("m"); case SortTarget.PostTime: return("f"); case SortTarget.VideoTime: return("l"); default: throw new Exception("設定したサーチオプションが不正です"); } }
/** * convert client SortTarget to apu SortTarget. */ public static RangeRequest.Types.SortTarget ToRangeRequestSortTarget(SortTarget target) { switch (target) { case SortTarget.KEY: return(RangeRequest.Types.SortTarget.Key); case SortTarget.CREATE: return(RangeRequest.Types.SortTarget.Create); case SortTarget.MOD: return(RangeRequest.Types.SortTarget.Mod); case SortTarget.VALUE: return(RangeRequest.Types.SortTarget.Value); case SortTarget.VERSION: return(RangeRequest.Types.SortTarget.Version); default: return(RangeRequest.Types.SortTarget.Create); } }
/** * Sort the return key value pairs in the provided <i>field</i>. * * @param field field to sort the key value pairs by the provided * @return builder */ public Builder withSortField(SortTarget field) { this.sortTarget = field; return(this); }
private static void SetIndicatorCore(SortIndicatorController Instance, SortTarget Target, SortDirection Direction) { switch (Target) { case SortTarget.Name: { Instance.Indicator1Icon = new FontIcon { Glyph = Direction == SortDirection.Ascending ? UpArrowIcon : DownArrowIcon }; Instance.Indicator1Visibility = Visibility.Visible; Instance.Indicator2Visibility = Visibility.Collapsed; Instance.Indicator3Visibility = Visibility.Collapsed; Instance.Indicator4Visibility = Visibility.Collapsed; break; } case SortTarget.ModifiedTime: { Instance.Indicator2Icon = new FontIcon { Glyph = Direction == SortDirection.Ascending ? UpArrowIcon : DownArrowIcon }; Instance.Indicator1Visibility = Visibility.Collapsed; Instance.Indicator2Visibility = Visibility.Visible; Instance.Indicator3Visibility = Visibility.Collapsed; Instance.Indicator4Visibility = Visibility.Collapsed; break; } case SortTarget.Type: { Instance.Indicator3Icon = new FontIcon { Glyph = Direction == SortDirection.Ascending ? UpArrowIcon : DownArrowIcon }; Instance.Indicator1Visibility = Visibility.Collapsed; Instance.Indicator2Visibility = Visibility.Collapsed; Instance.Indicator3Visibility = Visibility.Visible; Instance.Indicator4Visibility = Visibility.Collapsed; break; } case SortTarget.Size: { Instance.Indicator4Icon = new FontIcon { Glyph = Direction == SortDirection.Ascending ? UpArrowIcon : DownArrowIcon }; Instance.Indicator1Visibility = Visibility.Collapsed; Instance.Indicator2Visibility = Visibility.Collapsed; Instance.Indicator3Visibility = Visibility.Collapsed; Instance.Indicator4Visibility = Visibility.Visible; break; } default: { throw new NotSupportedException("SortTarget is not supported"); } } Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator1Icon))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator2Icon))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator3Icon))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator4Icon))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator1Visibility))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator2Visibility))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator3Visibility))); Instance.PropertyChanged?.Invoke(Instance, new PropertyChangedEventArgs(nameof(Indicator4Visibility))); }
public static int SearchInsertLocation <T>(ICollection <T> InputCollection, T SearchTarget, SortTarget Target, SortDirection Direction) where T : IStorageItemPropertiesBase { if (InputCollection == null) { throw new ArgumentNullException(nameof(InputCollection), "Argument could not be null"); } if (SearchTarget == null) { throw new ArgumentNullException(nameof(SearchTarget), "Argument could not be null"); } IEnumerable <T> FilteredCollection = null; if (SearchTarget is FileSystemStorageFile) { FilteredCollection = InputCollection.Where((Item) => Item is FileSystemStorageFile); } else if (SearchTarget is FileSystemStorageFolder) { FilteredCollection = InputCollection.Where((Item) => Item is FileSystemStorageFolder); } else { return(-1); } switch (Target) { case SortTarget.Name: { if (Direction == SortDirection.Ascending) { (int Index, T Item)SearchResult = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => string.Compare(Value.Item.Name, SearchTarget.Name, StringComparison.OrdinalIgnoreCase) > 0); if (SearchResult.Item == null) { if (SearchTarget is FileSystemStorageFile) { return(InputCollection.Count); } else { return(InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } } else { if (SearchTarget is FileSystemStorageFile) { return(SearchResult.Index + InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } else { return(SearchResult.Index); } } } else { //未找到任何匹配的项目时,FirstOrDefault返回元组的默认值,而int的默认值刚好契合此处需要返回0的要求,因此无需像SortDirection.Ascending一样进行额外处理 int Index = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => string.Compare(Value.Item.Name, SearchTarget.Name, StringComparison.OrdinalIgnoreCase) < 0).Index; if (SearchTarget is FileSystemStorageFolder) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } return(Index); } } case SortTarget.Type: { if (Direction == SortDirection.Ascending) { (int Index, T Item)SearchResult = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => string.Compare(Value.Item.Type, SearchTarget.Type, StringComparison.OrdinalIgnoreCase) > 0); if (SearchResult.Item == null) { if (SearchTarget is FileSystemStorageFile) { return(InputCollection.Count); } else { return(InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } } else { if (SearchTarget is FileSystemStorageFile) { return(SearchResult.Index + InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } else { return(SearchResult.Index); } } } else { //未找到任何匹配的项目时,FirstOrDefault返回元组的默认值,而int的默认值刚好契合此处需要返回0的要求,因此无需像SortDirection.Ascending一样进行额外处理 int Index = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => string.Compare(Value.Item.Type, SearchTarget.Type, StringComparison.OrdinalIgnoreCase) < 0).Index; if (SearchTarget is FileSystemStorageFolder) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } return(Index); } } case SortTarget.ModifiedTime: { if (Direction == SortDirection.Ascending) { (int Index, T Item)SearchResult = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => DateTimeOffset.Compare(Value.Item.ModifiedTimeRaw, SearchTarget.ModifiedTimeRaw) > 0); if (SearchResult.Item == null) { if (SearchTarget is FileSystemStorageFile) { return(InputCollection.Count); } else { return(InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } } else { if (SearchTarget is FileSystemStorageFile) { return(SearchResult.Index + InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } else { return(SearchResult.Index); } } } else { //未找到任何匹配的项目时,FirstOrDefault返回元组的默认值,而int的默认值刚好契合此处需要返回0的要求,因此无需像SortDirection.Ascending一样进行额外处理 int Index = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => DateTimeOffset.Compare(Value.Item.ModifiedTimeRaw, SearchTarget.ModifiedTimeRaw) < 0).Index; if (SearchTarget is FileSystemStorageFolder) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } return(Index); } } case SortTarget.Size: { if (Direction == SortDirection.Ascending) { (int Index, T Item)SearchResult = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => Value.Item.SizeRaw.CompareTo(SearchTarget.SizeRaw) > 0); if (SearchResult.Item == null) { if (SearchTarget is FileSystemStorageFile) { return(InputCollection.Count); } else { return(InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } } else { if (SearchTarget is FileSystemStorageFile) { return(SearchResult.Index + InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } else { return(SearchResult.Index); } } } else { //未找到任何匹配的项目时,FirstOrDefault返回元组的默认值,而int的默认值刚好契合此处需要返回0的要求,因此无需像SortDirection.Ascending一样进行额外处理 int Index = FilteredCollection.Select((Item, Index) => (Index, Item)).FirstOrDefault((Value) => Value.Item.SizeRaw.CompareTo(SearchTarget.SizeRaw) < 0).Index; if (SearchTarget is FileSystemStorageFolder) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } return(Index); } } default: { return(-1); } } }
public static int SearchInsertLocation <T>(ICollection <T> InputCollection, T SearchTarget, SortTarget Target, SortDirection Direction) where T : IStorageItemPropertiesBase { if (InputCollection == null) { throw new ArgumentNullException(nameof(InputCollection), "Argument could not be null"); } if (SearchTarget == null) { throw new ArgumentNullException(nameof(SearchTarget), "Argument could not be null"); } IEnumerable <T> FilteredCollection = null; if (SearchTarget is FileSystemStorageFile) { FilteredCollection = InputCollection.Where((Item) => Item is FileSystemStorageFile); } else if (SearchTarget is FileSystemStorageFolder) { FilteredCollection = InputCollection.Where((Item) => Item is FileSystemStorageFolder); } else { return(-1); } switch (Target) { case SortTarget.Name: { List <T> FilteredCollectionCopy = new List <T>(FilteredCollection) { SearchTarget }; int Index = FilteredCollectionCopy.OrderByLikeFileSystem((Item) => Item.Name, Direction) .Select((Item, Index) => (Index, Item)) .First((Value) => Value.Item.Equals(SearchTarget)).Index; if (Direction == SortDirection.Ascending) { if (SearchTarget is FileSystemStorageFile) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFolder); } } else { if (SearchTarget is FileSystemStorageFolder) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } } return(Index); } case SortTarget.Type: { List <T> InputCollectionCopy = new List <T>(InputCollection) { SearchTarget }; if (Direction == SortDirection.Ascending) { return(InputCollectionCopy.Where((Item) => Item is FileSystemStorageFolder) .OrderBy((Item) => Item.Type) .Concat(InputCollectionCopy.Where((Item) => Item is FileSystemStorageFile).OrderBy((Item) => Item.Type)) .GroupBy((Item) => Item.Type) .Select((Group) => Group.OrderByLikeFileSystem((Item) => Item.Name, Direction)) .SelectMany((Array) => Array) .Select((Item, Index) => (Index, Item)) .First((Value) => Value.Item.Equals(SearchTarget)).Index); } else { return(InputCollectionCopy.Where((Item) => Item is FileSystemStorageFolder) .OrderByDescending((Item) => Item.Type) .Concat(InputCollectionCopy.Where((Item) => Item is FileSystemStorageFile).OrderByDescending((Item) => Item.Type)) .GroupBy((Item) => Item.Type) .Select((Group) => Group.OrderByLikeFileSystem((Item) => Item.Name, Direction)) .SelectMany((Array) => Array) .Select((Item, Index) => (Index, Item)) .First((Value) => Value.Item.Equals(SearchTarget)).Index); } } case SortTarget.ModifiedTime: { if (Direction == SortDirection.Ascending) { (int Index, T Item)SearchResult = FilteredCollection.Select((Item, Index) => (Index, Item)) .FirstOrDefault((Value) => DateTimeOffset.Compare(Value.Item.ModifiedTimeRaw, SearchTarget.ModifiedTimeRaw) > 0); if (SearchResult.Item == null) { if (SearchTarget is FileSystemStorageFile) { return(InputCollection.Count); } else { return(InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } } else { if (SearchTarget is FileSystemStorageFile) { return(SearchResult.Index + InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } else { return(SearchResult.Index); } } } else { //未找到任何匹配的项目时,FirstOrDefault返回元组的默认值,而int的默认值刚好契合此处需要返回0的要求,因此无需像SortDirection.Ascending一样进行额外处理 int Index = FilteredCollection.Select((Item, Index) => (Index, Item)) .FirstOrDefault((Value) => DateTimeOffset.Compare(Value.Item.ModifiedTimeRaw, SearchTarget.ModifiedTimeRaw) < 0).Index; if (SearchTarget is FileSystemStorageFolder) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } return(Index); } } case SortTarget.Size: { if (SearchTarget is FileSystemStorageFolder) { List <T> FilteredCollectionCopy = new List <T>(FilteredCollection) { SearchTarget }; int Index = FilteredCollectionCopy.OrderByLikeFileSystem((Item) => Item.Name, SortDirection.Ascending) .Select((Item, Index) => (Index, Item)) .First((Value) => Value.Item.Equals(SearchTarget)).Index; if (Direction == SortDirection.Descending) { Index += InputCollection.Count((Item) => Item is FileSystemStorageFile); } return(Index); } else { if (Direction == SortDirection.Ascending) { (int Index, T Item)SearchResult = FilteredCollection.Select((Item, Index) => (Index, Item)) .FirstOrDefault((Value) => Value.Item.SizeRaw.CompareTo(SearchTarget.SizeRaw) > 0); if (SearchResult.Item == null) { return(InputCollection.Count); } else { return(SearchResult.Index + InputCollection.Count((Item) => Item is FileSystemStorageFolder)); } } else { return(FilteredCollection.Select((Item, Index) => (Index, Item)) .FirstOrDefault((Value) => Value.Item.SizeRaw.CompareTo(SearchTarget.SizeRaw) < 0).Index); } } } default: { return(-1); } } }
public SortStateChangedEventArgs(string Path, SortTarget Target, SortDirection Direction) { this.Path = Path; this.Target = Target; this.Direction = Direction; }
public static IEnumerable <T> GetSortedCollection <T>(IEnumerable <T> InputCollection, SortTarget Target, SortDirection Direction) where T : IStorageItemPropertiesBase { IEnumerable <T> FolderList = InputCollection.Where((It) => It is FileSystemStorageFolder); IEnumerable <T> FileList = InputCollection.Where((It) => It is FileSystemStorageFile); switch (Target) { case SortTarget.Name: { return(Direction == SortDirection.Ascending ? FolderList.OrderByLikeFileSystem((Item) => Item.Name, Direction) .Concat(FileList.OrderByLikeFileSystem((Item) => Item.Name, Direction)) : FileList.OrderByLikeFileSystem((Item) => Item.Name, Direction) .Concat(FolderList.OrderByLikeFileSystem((Item) => Item.Name, Direction))); } case SortTarget.Type: { return(Direction == SortDirection.Ascending ? FolderList.OrderBy((Item) => Item.Type) .Concat(FileList.OrderBy((Item) => Item.Type)) .GroupBy((Item) => Item.Type) .Select((Group) => Group.OrderByLikeFileSystem((Item) => Item.Name, Direction)) .SelectMany((Array) => Array) : FolderList.OrderByDescending((Item) => Item.Type) .Concat(FileList.OrderByDescending((Item) => Item.Type)) .GroupBy((Item) => Item.Type) .Select((Group) => Group.OrderByLikeFileSystem((Item) => Item.Name, Direction)) .SelectMany((Array) => Array)); } case SortTarget.ModifiedTime: { return(Direction == SortDirection.Ascending ? FolderList.OrderBy((Item) => Item.ModifiedTimeRaw) .Concat(FileList.OrderBy((Item) => Item.ModifiedTimeRaw)) : FileList.OrderByDescending((Item) => Item.ModifiedTimeRaw) .Concat(FolderList.OrderByDescending((Item) => Item.ModifiedTimeRaw))); } case SortTarget.Size: { return(Direction == SortDirection.Ascending ? FolderList.OrderByLikeFileSystem((Item) => Item.Name, SortDirection.Ascending) .Concat(FileList.OrderBy((Item) => Item.SizeRaw)) : FileList.OrderByDescending((Item) => Item.SizeRaw) .Concat(FolderList.OrderByLikeFileSystem((Item) => Item.Name, SortDirection.Ascending))); } case SortTarget.Path: { return(Direction == SortDirection.Ascending ? FolderList.OrderBy((Item) => Item.Path) .Concat(FileList.OrderBy((Item) => Item.SizeRaw)) : FileList.OrderByDescending((Item) => Item.Path) .Concat(FolderList.OrderByDescending((Item) => Item.SizeRaw))); } default: { if (typeof(T) == typeof(IRecycleStorageItem)) { return(Direction == SortDirection.Ascending ? FolderList.OfType <IRecycleStorageItem>() .OrderBy((Item) => Item.OriginPath) .Concat(FileList.OfType <IRecycleStorageItem>().OrderBy((Item) => Item.OriginPath)) .OfType <T>() : FolderList.OfType <IRecycleStorageItem>() .OrderByDescending((Item) => Item.OriginPath) .Concat(FileList.OfType <IRecycleStorageItem>().OrderByDescending((Item) => Item.OriginPath)) .OfType <T>()); } else { return(null); } } } }