0
我已經搜索了很多帖子,我仍然無法實現我想要的結果。linq2sql IQueryable謂詞不能過濾SQL表記錄
我有一個帶有3個組合框的aspx頁面和一個搜索按鈕。 當用戶點擊搜索按鈕時,我想構建一個linq查詢,它只會返回組合框中選定的過濾器的結果並將其綁定到一個gridview。
組合框是帳戶,網站和交易,我正在通過日誌進行搜索,並且只想返回所選組合框,如果未從組合框中進行選擇,則忽略查詢的添加。
在點擊按鈕
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()的原因是我可以使用表達式樹,標準查詢是IEnumerable而不是IQueryable。 – user2343291
它確實不應該。如果是這樣,這意味着您的所有過濾將在客戶端執行。如果你使用的是'DataContext',我期望'Table'。 –