Chuyển sang biểu thức truy vấn LINQ hoạt động khác nhau tùy thuộc vào cú pháp được sử dụng và tôi tự hỏi tại sao lại xảy ra trường hợp này.LINQ ở đâu từ khóa so với Thông số mở rộng và tham số ở đâu
Hãy nói rằng tôi có chức năng rất chung chung này
private IEnumerable<Company>
GetCompanies(Expression<Func<Company, bool>> whereClause)
Việc thực hiện sau đây làm việc như mong đợi
private IEnumerable<Company>
GetCompanies(Expression<Func<Company, bool>> whereClause)
{
return (from c in _ctx.Companies.Where(whereClause) select c);
}
Nhưng thực hiện tiếp theo này không biên dịch (Delegate 'System.Func' không mất 1 đối số)
private IEnumerable<Company>
GetCompanies(Expression<Func<Company, bool>> whereClause)
{
return (from c in _ctx.Companies where whereClause select c);
}
Rõ ràng là Tôi chỉ có thể sử dụng cú pháp đầu tiên, nhưng tôi đã tự hỏi tại sao trình biên dịch không xử lý các từ khóa ở đâu giống như phần mở rộng Ở đâu?
Cảm ơn, Thomas
Nếu bạn chấp nhận Func làm đối số thay vì Expression >, thì bạn có thể đã sử dụng Predicate làm loại tham số. –
Vâng đây là một ví dụ đơn giản chỉ tập trung vào sự khác biệt 'ở đâu'. Lý do cho việc sử dụng biểu thức> là tôi muốn nơi được thực hiện trên cơ sở dữ liệu và không phải trong bộ nhớ. –