我有一个从SQL查询返回到WCF服务的大约5,000个对象的可观察集合。我被要求按对象中的3个字段对集合进行排序。为简便起见,可以说这是我的c#模型:
public class TestObject{
public string type1{get; set;}
public string type2{get; set;}
public string type3(get; set;}
}
这是我必须尝试排序的一些测试数据:
public ObservableCollection<TestObject> TestObjects = new ObservableCollection<TestObject>();
TestObjects.Add(new TestObject('708','4','(A)'));
TestObjects.Add(new TestObject('7','41B','1(A)'));
TestObjects.Add(new TestObject('69','2','45'));
TestObjects.Add(new TestObject('708','(B)'));
TestObjects.Add(new TestObject('69','5'));
TestObjects.Add(new TestObject('7','41','1(B)'));
TestObjects.Add(new TestObject('7',''));
有没有一种方法可以对它们进行动态排序,以便Observable集合可以像这样进行排序?
{(7,41,''),(7,1(B)),41B,1(A)),(69,2,5),45),(708,4,(A)),(B))}
到目前为止,我已经能够按类型1对它们进行排序,但是随后尝试按类型2对螺钉进行排序,从类型1进行排序。这是我用来尝试排序的方法,后面是我如何称呼它:
protected virtual ObservableCollection<TestObject> SortTestObjects(ObservableCollection<TestObjects> unsortedObjects,string level){
var SortedObjects = new ObservableCollection<TestObject>();
Comparison<TestObject> numericComp;
Comparison<TestObject> comparison;
Comparison<TestObject> AlphaNumericComp;
bool sortNumeric = false;
switch (level)
{
case "type1":
numericComp = (a,b) =>
{
var aKey = Convert.ToDouble(a.type1);
var bKey = Convert.ToDouble(b.type1);
return aKey.CompareTo(bKey);
};
AlphaNumericComp = (a,b) =>
{
return string.CompareOrdinal(a.type1,b.type1);
};
sortNumeric = unsortedObjects.ToList().TrueForAll(i => i.type1.Isnumeric());
break;
case "type2":
numericComp = (a,b) =>
{
var aKey = Convert.ToDouble(a.type2);
var bKey = Convert.ToDouble(b.type2);
return aKey.CompareTo(bKey);
};
AlphaNumericComp = (a,b) =>
{
return string.CompareOrdinal(a.type2,b.type2);
};
sortNumeric = unsortedObjects.ToList().TrueForAll(i => i.type2.Isnumeric());
break;
case "type3":
numericComp = (a,b) =>
{
var aKey = Convert.ToDouble(a.type3);
var bKey = Convert.ToDouble(b.type3);
return aKey.CompareTo(bKey);
};
AlphaNumericComp = (a,b) =>
{
return string.CompareOrdinal(a.type3,b.type3);
};
sortNumeric = unsortedObjects.ToList().TrueForAll(i => i.type3.Isnumeric());
break;
default:
numericComp = (a,b.type1);
};
sortNumeric = unsortedObjects.ToList().TrueForAll(i => i.type1.Isnumeric());
break;
}
comparison = sortNumeric ? numericComp : AlphaNumericComp;
unsortedObjects.ToList().Sort(comparison);
foreach(var obj in unsortedOjects){
SortedObjects.Add(obj)
}
return SortedObjects;
}
Public ObservableCollection<TestObject> SortAllTestObjects(){
var sort1 = SortTestObjects(TestObjects,"type1");
var sort2 = SortTestObjects(sort1,"type2");
var sort3 = SortTestObjects(sort2,"type3");
return sort3;
}
**编辑:这是在此示例中使用的SQL查询。只要我在客户端中获得正确的订单,我就完全可以更改查询**
Select type1,type2,type3 from dbo.testObject tO where tO.del_date is null
如果您需要更多信息,请告诉我。任何帮助或建设性的反馈都将很棒!