我使用WPF并且我有一个-(NSDecimalNumber *)getRoundedNumberAfterPointDigitsCount:(int)digitsCount withDouble:(double)doubleValue{
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%f",doubleValue]];
NSDecimalNumberHandler *decimalHandler = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundPlain scale:digitsCount raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
decimalNumber = [decimalNumber decimalNumberByRoundingAccordingToBehavior:decimalHandler];
return decimalNumber;
}
,myObj类是:
DECLARE @AcademicYear varchar(9) = '2017/2018',
@Collection varchar(50) = 'Autumn';
SELECT
Test = NULLIF(COUNT(g1.Points),0),
cast(s.Year as int) as Year,
CASE r.Subject
WHEN 'English' THEN 1
WHEN 'English Language' THEN 2
WHEN 'English Literature' THEN 3
WHEN 'Maths' THEN 4
WHEN 'Science' THEN 5
WHEN 'Additional Science' THEN 6
WHEN 'Biology' THEN 7
WHEN 'Chemistry' THEN 8
WHEN 'Physics' THEN 9
WHEN 'Arabic' THEN 10
WHEN 'Dutch' THEN 11
WHEN 'French' THEN 12
WHEN 'Russian' THEN 13
WHEN 'Spanish' THEN 14
WHEN 'Urdu' THEN 15
ELSE 16
END AS SubjectSort,
r.Subject, r.Class,
0 AS GroupSort,
'SEND (' + CAST(COUNT(g1.Points) AS varchar) + ')' AS 'Group',
--Other
SUM(CASE
WHEN r.Progress in ('X','Abs','New') THEN 1
ELSE 0
END) AS 'No. Other'
FROM Results r
JOIN Grades g1
ON r.Result = g1.Grade
LEFT JOIN students s
ON r.UPN = s.UPN
WHERE r.AcademicYear = @AcademicYear
AND s.AcademicYear = @AcademicYear
AND r.Collection = @Collection
AND SEND = 'Y'
GROUP BY s.Year,
r.Subject, r.Class
Order by cast(s.year as int) desc, SubjectSort, r.Subject, r.Class, GroupSort
happenndAtMonth 是月份的名称。我的observableCollection( MyObColl )将具有以下值:
Observablecollection<MyObj>
我需要按月对MyObColl进行排序输出应该是:
MyObject
{
string happenAtMonth;
int value;
}
我将如何实现这一点,并使用按月名称的ObservableCollection进行排序? 谢谢
答案 0 :(得分:3)
这会将字符串格式的月份解析为整数值并对其进行排序:
var values = MyObColl.OrderBy( o => DateTime.ParseExact( o.Month , "MMMM" , CultureInfo.InvariantCulture ).Month )
.Select( o => $"Value was {o.Value} in {o.Month}" );
foreach ( var value in values )
Console.WriteLine( value );
答案 1 :(得分:1)
您需要在月份字符串与其索引之间提供连接。例如:
var months = new Dictionary<string, int>()
{
{"January", 0},
{"February", 1}
//...
};
MyObjColl.OrderBy(x => months[x.happenAtMonth]);
或更好的方法可能是定义枚举:
public enum Month
{
January = 1,
February = 2,
//...
}
并将对象的定义更改为:
public class MyObject
{
public Month HappenAtMonth { get; set; }
public int Value { get; set; }
}
然后:
MyObjColl.OrderBy(x => x.HappenAtMonth);
答案 2 :(得分:0)
尝试一下:
MyObjColl= new ObservableCollection<DataConcept>(MyObjColl.OrderBy(i => i.HappenAtMonth));