Các tham số là kiểu:
System.Linq.Expressions.Expression<Func<T, bool>> find
Điều đó có nghĩa nó có thể mất một vị (các "ở đâu" khoản), và chỉ một vị. Do đó các bit duy nhất bạn có thể vượt qua trong đó là bộ lọc:
x => x.ConfigurationReference == "172.16.59.175"
Để làm những gì bạn muốn, bạn sẽ cần phải thêm phần còn lại của các mã trong FindEntities
, để nó trở thành:
var val = dataContext.GetTable<T>().Where(find)
.OrderByDescending(x => x.Date).Take(100).ToList<T>();
(lưu ý rằng cũng Take
thực sự nên sau các OrderByDescending
)
Một cách để bạn có thể làm điều đó sẽ là:
public static List<T> FindEntities<T>(TrackingDataContext dataContext,
System.Linq.Expressions.Expression<Func<T, bool>> find,
Func<IQueryable<T>, IQueryable<T>> additonalProcessing = null
) where T : class
{
var query = dataContext.GetTable<T>().Where(find);
if(additonalProcessing != null) query = additonalProcessing(query);
return query.ToList<T>();
}
và gọi:
var data = FindEntities(db, x => x.ConfigurationReference == "172.16.58.175",
q => q.OrderByDescending(x => x.Date).Take(100));
Tuy nhiên, thẳng thắn mà nói tôi không chắc chắn những gì các điểm này sẽ là ... người gọi có thể làm tất cả điều đó bản thân tại địa phương nhiều thuận tiện, mà không sử dụng FindEntities
ở tất cả. Chỉ cần:
var data = db.GetTable<T>()
.Where(x => x.ConfigurationReference == "172.16.58.175")
.OrderByDescending(x => x.Date).Take(100).ToList();
hoặc thậm chí:
var data = db.SomeTable
.Where(x => x.ConfigurationReference == "172.16.58.175")
.OrderByDescending(x => x.Date).Take(100).ToList();
hoặc chỉ:
var data = (from row in db.SomeTable
where row.ConfigurationReference == "172.16.58.175"
orderby row.Date descending
select row).Take(100).ToList();
xử lý ngoại lệ của bạn đạt được gì hữu ích, btw, và không làm một số điều xấu (nó sẽ mất stacktrace); bạn nên xóa 'try' /' catch' - mà sau đó làm cho toàn bộ phương thức 'FindEntities' trông khá dư thừa –