2016-04-23 15 views
5

Làm thế nào để viết biểu LINQ đúng được sử dụng trong điều kiện chung cho "ở đâu"LINQ biểu IEnumerable <TEntity> không chứa định nghĩa của nơi

public static class ConStr 
{ 
    public static MySqlConnection Conn() 
    { 
     return new MySqlConnection(ConfigurationManager.ConnectionStrings["DBCN"].ConnectionString); 
    } 

} 

Repositor.cs

private IDbConnection cn; 

public IEnumerable<TEntity> FilterBy(Expression<Func<TEntity, bool>> expression) 
{ 
    using(cn = ConStr.Conn()) 
    { 
     return cn.GetAll<TEntity>(null).Where(expression); <--error does not contain definition of where 
    } 

} 

nhưng điều này với biểu LINQ sẽ chạy

using (IDbConnection cn = ConStr.Conn()) 
{ 
    var que = cn.GetAll<Cause>(null).Where(x=>x.cause_id == 1);    
    bool dbIE = Utils.IsAny<Cause>(que); 
    if (dbIE == true) 
    { 
     DGRID.DataSource = que; 
    } 
    else 
    { 
     MessageBox.Show("Sorry No Value"); 
    } 
} 
+0

Rất có thể 'GetAll' của bạn đang trả về 'IEnumerable ' không có 'Where' với' Expression', nhưng 'Func'. Trực quan không có sự khác biệt giữa 'Biểu thức >' và 'Func <...>', đó là lý do đoạn mã thứ hai của bạn biên dịch. –

+0

Thay vì thực hiện IEnumerable, bạn có thể đặt tất cả các mục trong một Bộ sưu tập danh sách. Một bộ sưu tập danh sách là IEnumerable, do đó bạn không phải viết bạn thực hiện riêng. – jdweng

+0

@IvanStoev ah Tôi thấy cảm ơn rất nhiều Tôi sẽ cố gắng thay đổi –

Trả lời

4

Where cho IEnumerable<T> không chứa quá tải mất Expression. Để sử dụng Where với Expression, bạn phải thay đổi kết quả của GetAll thành IQueryable. Đối với trường hợp cụ thể của bạn, bạn chỉ có thể thay đổi Expression<Func<TEntity, bool>> expression thành Func<TEntity, bool> expression và mọi thứ sẽ hoạt động.

+0

Cảm ơn Func expression -> là dành cho IEnumerable và cho là cho IQueryable là -> Biểu thức > expression. –

+1

Ngoài ra còn có phần mở rộng 'AsQueryable()' trên 'IEnumerable ' loại mà đưa 'IEnumerable' vào' IQueryable', nhưng tôi thực sự không biết tại sao bạn muốn sử dụng nó trong sản xuất .. Hầu hết thời gian đơn giản 'Func' hoặc' Action' sẽ là đủ và nếu bạn muốn sử dụng 'Expression' bạn cần biết tại sao –

Các vấn đề liên quan