2010-10-22 27 views
1

我是linq新手,現在我需要使用指定的排序參數進行靈活排序。 但是Linq,我該如何做靈活的排序?

var query = 
    from accessdoc in dt1.AsEnumerable() 
    join content in dt2.AsEnumerable() 
    on accessdoc.Field<string>("name") equals content.Field<string>("FileName") 
    into docs 
    orderby accessdoc.Field<DateTime>("CreateDate") descending //TODO: HOW TO SORT?? 

不符合要求。 我可以在這裏幫忙嗎?

+1

你能否提供整個LINQ表達式?爲什麼不「按CreateDate排序」爲你工作? – akonsu 2010-10-22 04:31:54

+0

它適用於我,但它不靈活,我需要做參數指定,比如如果參數傳遞如何 - 「ID DESC」? – Elaine 2010-10-22 04:35:37

+0

VAR的查詢= 從accessdoc在dt1.AsEnumerable() 加入dt2.AsEnumerable(內容) 上accessdoc.Field ( 「名稱」)等於content.Field ( 「文件名」) 到文檔 排序依據accessdoc。字段(MY_PARAMETER)降 – akonsu 2010-10-22 05:15:29

回答

1

由於linq是後期綁定,你可以做你的查詢,然後單獨應用你的排序。如果你是怎麼做的排序參數略有你可以分手了,你可以這樣做:現在(這個代碼沒有被編譯,所以請多多包涵)

public enum SortDirection 
{ 
    Ascending = 0, //default value 
    Descending = 1 
} 

如果在LINQ表達式通和方向,你可以做這樣的事情:

public IQueryable<MyObject> GetWithSort(System.Linq.Expressions.Expression<Func<MyObject, TKey>> sortExpression, SortDirection direction) 
{ 
    var results = from accessdoc in dt1.AsEnumerable() 
     join content in dt2.AsEnumerable() 
     on accessdoc.Field<string>("name") equals content.Field<string>("FileName") 
     into docs 
     select...; 

    if (direction == SortDirection.Descending) 
     return results.OrderByDescending(sortExpression); 

    return results.OrderBy(sortExpression) 
} 

選擇......必須與然而,你選擇你的對象了LINQ語句來代替。

+0

對不起...我忘了給..現在做.. .. :) – Elaine 2010-11-08 09:12:03