簡體   English   中英

使用linq函數實現動態查詢

[英]Implementing dynamic query using linq functions

我正在嘗試實現一個代碼塊,該代碼塊可以向linq查詢動態添加where子句。 這完全可以幫助我在搜索過程中僅考慮全文本框並跳過空控件。現在的問題是,盡管我在Linq查詢中添加了所有條件, 但它會返回所有行並忽略where子句。

原因是什么?如何避免此問題?

在這里,我有一個簡單的抽象BaseEntity類,該類僅包含一個稱為Id的字段:

public abstract class BaseEntity
    {
        public virtual int Id { get; set; }
    }

我的EmailEntity類是從此BaseEntity繼承的:

    public class EmailEntity : BaseEntity
    {
        public string Address { get; set; }
        public string Pwd { get; set; }
        public string Hint { get; set; }
        public EmailGroup? EmailGroup { get; set; }
    }

這是我創建查詢的地方:

 private void BtnSearch_Click(object sender, RoutedEventArgs e)
        {
            var mails = new List<EmailEntity>();    
            using (var op = new OperationContext())
            {
                var query = op.EmailEntities;
                if (!string.IsNullOrEmpty(SearchEmailTxt.Text))
                    query.Where(item => item.Address == SearchEmailTxt.Text);
                if (!string.IsNullOrEmpty(SearchEmailIdTxt.Text))
                    query.Where(item => item.Id == Convert.ToInt16(SearchEmailIdTxt.Text));
                if (SearchEmailGroupCombo.SelectedItem != null)
                    query.Where(item => item.EmailGroup.ToString() == SearchEmailGroupCombo.SelectedItem.ToString());
                var result=query.ToList();
                result.ForEach(mails.Add);
                EmailDataGrid.ItemsSource = mails;
            }
        }

因為query.Where返回了查詢,所以您忽略了結果,這使您開始工作。 您應該更改代碼,例如query = query.Where(....);

private void BtnSearch_Click(object sender, RoutedEventArgs e)
{
    var mails = new List<EmailEntity>();    
    using (var op = new OperationContext())
    {
        IQueryable<EmailEntity> query = op.EmailEntities;
        if (!string.IsNullOrEmpty(SearchEmailTxt.Text))
            query = query.Where(item => item.Address == SearchEmailTxt.Text);
        if (!string.IsNullOrEmpty(SearchEmailIdTxt.Text))
            query = query.Where(item => item.Id == Convert.ToInt16(SearchEmailIdTxt.Text));
        if (SearchEmailGroupCombo.SelectedItem != null)
            query = query.Where(item => item.EmailGroup.ToString() == SearchEmailGroupCombo.SelectedItem.ToString());
        var result=query.ToList();
        result.ForEach(mails.Add);
        EmailDataGrid.ItemsSource = mails;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM