tôi đang cố gắng để tạo ra sau động, tuy nhiên tôi đang gặp vấn đề gọi phương thức mở rộng "FirstOrDefault"Expression.Call - Kêu gọi mở rộng LINQ: FirstOrDefault, đâu
using(var context = new Entities())
{
var list = context.Engines.Include("Cars").Select(e => e.Cars.FirstOrDefault()).ToList();
}
Tôi đã sau
Expression parameter = Expression.Parameter(typeof(Engine), "e");
Expression property = Expression.Property(parameter, "Cars");
- tham số = {e}
- tài sản = {} e.Cars
Đó là tốt, nhưng tôi đang gặp phải một vấn đề khi tôi cố gắng và gọi phương thức FirstOrDefault
var result = Expression.Call(typeof(Queryable), "FirstOrDefault", new type[] { typeof(Car)}, property);
Tôi muốn để có được
- result = {e.Cars.FirstOrDefault()}
nhưng tôi nhận được một InvalidOperationException
Không có phương pháp chung 'FirstOrDefault' trên loại 'System.Linq.Queryable' là tương thích với kiểu được cung cấp đối số và đối số. Không cần loại đối số nếu phương pháp không chung chung.
Mọi trợ giúp sẽ được đánh giá cao.
Cảm ơn. Adam
Bạn có thể làm sáng tỏ? FirstOrDefault không phải là * thường là * một phần của lambda, vì vậy không cần phải tham gia với Expression –
Mục tiêu của tôi là tạo một lambda bên trong một lamda, vì vậy một cái gì đó như thế này: . Where (e => e.Cars .Where (c => c.Name == "Honda") Đếm> 0) Điều đó làm rõ bất cứ điều gì hay tôi bối rối? – Aducci