linq2sql IQueryable谓词,无法过滤SQL表记录

时间:2013-11-25 13:24:12

标签: c# sql linq iqueryable predicate

我搜索过很多帖子,但仍然无法达到我想要的结果。

我有一个包含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;
    }

我不知道我做错了什么 提前谢谢。

1 个答案:

答案 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();