많은 게시물을 검색했는데 원하는 결과를 얻을 수 없습니다.linq2sql IQueryable Predicate는 SQL 테이블 레코드를 필터링 할 수 없습니다.
3 개의 콤보 박스가있는 aspx 페이지와 검색 버튼이 있습니다. 사용자가 검색 버튼을 클릭하면 콤보 상자에서 선택된 필터의 결과 만 반환하고 gridview에 바인딩하는 linq 쿼리를 작성하려고합니다.
콤보 박스는 계정, 사이트 및 트랜잭션입니다. 로그를 통해 검색 중이며 선택 항목이 콤보 박스에서 선택되지 않은 경우 선택한 콤보 상자 만 반환하려는 경우 쿼리에 대한 추가가 무시됩니다. 버튼 클릭에
는
protected void btnSearch_Click(object sender, EventArgs e)
{
// This is the Linq definition
List<Expression<Func<Logs, bool>>> predicates = new List<Expression<Func<Logs, bool>>>();
if (Convert.ToInt32(cboAccount.SelectedValue) != -1)
{
var accountID = Convert.ToInt32(cboAccount.SelectedValue);
predicates.Add(p => p.accountID == accountID);
}
if (Convert.ToInt32(cboSite.SelectedValue) != -1)
{
var siteID = Convert.ToInt32(cboSite.SelectedValue);
predicates.Add(p => p.siteID == siteID);
}
if (Convert.ToInt32(cboTransactionType.SelectedValue) != -1)
{
var transID = Convert.ToInt32(cboTransactionType.SelectedValue);
predicates.Add(p => p.transactionID == transID);
}
rgLog.DataSource = Logs.LoadLogs(predicates);
}
방법 내 로그 내부 클래스
public class Logs
{
private int AccountID;
private int SiteID;
private string SerialNumber;
private int UserID;
private int TransActionMessageID;
public int accountID
{
get { return AccountID; }
set { AccountID = value; }
}
public int siteID
{
get { return SiteID; }
set { SiteID = value; }
}
public string serialNumber
{
get { return SerialNumber; }
set { SerialNumber = value; }
}
public int userID
{
get { return UserID; }
set { UserID = value; }
}
public int transactionMessageID
{
get { return TransActionMessageID; }
set { UserID = value; }
}
public static IQueryable<TransactionLog> LoadLogs(List<Expression<Func<TransactionLog, bool>>> predicates)
{
iThNkContextDataContext db = new iThNkContextDataContext();
var LogList = db.TransactionLogs.AsQueryable();
foreach (Expression<Func<TransactionLog, bool>> pred in predicates)
{
LogList = LogList.Where(pred);
}
List<TransactionLog> result = LogList.ToList();
return result;
}
내가 잘못 가 사전에 감사하고 무엇 메신저 모른다.
을 다음과 같이
내 코드는 지금 보면? 그리고'db.TransactionLogs'가'IQueryable '과 호환되어야 할 때 왜 AsQueryable()을 호출할까요? –
.AsQueryable() 추가 이유는 식 트리를 사용할 수 있으므로 표준 쿼리는 IQueryable이 아닌 IEnumerable입니다. – user2343291
정말 그렇게해서는 안됩니다. 그렇다면 모든 필터링이 클라이언트 측에서 수행 될 것임을 의미합니다. 'DataContext'를 사용한다면'Table'를 기대할 수 있습니다. –