我搜索过很多帖子,但仍然无法达到我想要的结果。
我有一个包含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;
}
我不知道我做错了什么 提前谢谢。
答案 0 :(得分:0)
谢谢Jon Skeet。
我的桌子和课程之间感到困惑。
我的代码现在看起来如下
List<Expression<Func<TransactionLog, bool>>> predicates = new List<Expression<Func<TransactionLog, bool>>>();
iThNkContextDataContext db = new iThNkContextDataContext();
if (Convert.ToInt32(cboAccount.SelectedValue) != -1)
{
predicates.Add(p => p.AccountID == Convert.ToInt32(cboAccount.SelectedValue));
}
if (Convert.ToInt32(cboSite.SelectedValue) != -1)
{
predicates.Add(p => p.SiteID == Convert.ToInt32(cboSite.SelectedValue));
}
if (Convert.ToInt32(cboMessage.SelectedValue) != -1)
{
predicates.Add(p => p.TransactionMessageID == Convert.ToInt32(cboMessage.SelectedValue));
}
var result = db.TransactionLogs.AsQueryable();
foreach (Expression<Func<TransactionLog, bool>> pred in predicates)
{
result = result.Where(pred);
}
rgLog.DataSource = result.ToList();