2015-05-30 106 views
0

如何創建和初始化以下類?具體來說,我正在努力與TSortKey。我認爲這將是這樣的:創建和初始化通用類

var p = new QueryParameters<Employees, e => e.LastName>(); // WRONG!! 

public class QueryParameters<T, TSortKey> where T : class 
{ 
    public int Page { get; set; } 
    public int PageSize { get; set; } 
    public string Filter { get; set; } 
    public Func<T, TSortKey> SortSelector { get; set; } 
    public bool Ascending { get; set; } 
} 

我試圖做的是在下面與上述QueryParameters對象的代碼替換GetEmployees方法的參數。

public QueryResults<Employees> GetEmployees<TSortKey>(int page, int pageSize, string filter, Func<Employees, TSortKey> sortSelector, bool asc) 
{ 

IEnumerable<Employees> query = Employees; 

if (filter != "*") 
{ 
    query = query.Where (e => e.LastName.StartsWith(filter)); 
} 

if (sortSelector != null) 
{ 
    query = asc ? query.OrderBy(sortSelector) : query.OrderByDescending(sortSelector); 
} 

var results = new QueryResults<Employees> 
{ 
    TotalItems = query.Count(), 
    Items = query.Skip((page - 1) * pageSize).Take(pageSize) 
}; 

return results; 
} 

public class QueryResults<T> where T : class { 
    public IEnumerable<T> Items { get; set; } 
    public int TotalItems { get; set; } 
} 

我覺得我很接近,但我也可能在左邊的領域。

回答

1

你在左邊的領域有點不足。泛型參數需要是類型名稱(類,結構,接口)。你似乎試圖傳遞一個lamdba方法,這不是一個類,結構或接口,所以它不起作用。

你可以做的是:

var p = new QueryParameters<Employee, string>(); 
p.SortSelector = e => e.LastName; 
+0

也做到了!謝謝。我只是試圖採用更通用和功能更強的編碼方法。在這一點上,我發現上面的示例代碼更難以閱讀和理解。我在正確的軌道上嗎? –