我有如下記錄LINQ的排序與一捻
最後2記錄3和4的孩子,我希望能夠通過量的記錄進行排序,但它應該是該非利息(父母)的人進行排序第一,然後他們的孩子應該經過這麼例如,它會是這樣
2000
2000
20001
99.84 (child of the above)
50000
249.58 (child of the above)
顯示基本上,我想我的排序量無視一個無線「IsInterest」被設置爲true,但是讓他們在父母之後出現。
我可以通過首先將所有父母帶入一個新的集合中,然後通過父母來查看是否有任何孩子,然後將父母插入到新集合中,但是我覺得這樣做效率不高髒碼,所以我想我會問,也許有人知道黑魔法。 這種排序還應該知道數量的asc/desc。
我可以發佈我的代碼拆分集合,並將它放在一起,如果它有幫助,但我想盡可能不使用該代碼。
我的排序方法接受一個字符串爲「升序」或「降序」如果這能幫助
謝謝
UPDATE2 我會指出,只有永遠將是2級,並且孩子將永遠只有一個父母(沒有祖父母),並且每個父母最多有一個孩子
更新代碼按照要求(字段名稱可能不同於數據庫字段..)
switch (sortMember.ToUpper())
{
case "AMOUNT":
{
//check to see if any imputed interests exist
if (contributions.Any(x => x.IsImputedInterest))
{
var children = contributions.Where(x => x.IsImputedInterest);
var sortedColl = contributions.Where(x => x.IsImputedInterest == false).OrderByWithDirection(x => x.ContributionAmount, sortDirection.ToUpper() == "DESCENDING").ToList();
foreach (var child in children)
{
//find the parent
var parentIndex = sortedColl.FindIndex(x => x.ContributionId == child.ParentContirbutionId);
sortedColl.Insert(parentIndex+1, child);
}
}
else
{
contributions = contributions.OrderByWithDirection(x => x.ContributionAmount, sortDirection.ToUpper() == "DESCENDING");
}
break;
}
}
.................
public static IOrderedEnumerable<TSource> OrderByWithDirection<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, bool descending)
{
return descending ? source.OrderByDescending(keySelector)
: source.OrderBy(keySelector);
}
public static IOrderedQueryable<TSource> OrderByWithDirection<TSource, TKey>(this IQueryable<TSource> source, Expression<Func<TSource, TKey>> keySelector, bool descending)
{
return descending ? source.OrderByDescending(keySelector)
: source.OrderBy(keySelector);
}
向我們展示您當前的排序方法。 –
您可以在'OrderBy' /'OrderByDescending'後面使用'ThenBy' /'ThenByDescending'。 – varocarbas
你將如何做到這一點,它會這樣排序他們第一次,99.83,249.58,2000 .....這不是我想要的 – Zoinky