Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq函数实现动态查询_C#_Linq - Fatal编程技术网

C# 使用linq函数实现动态查询

C# 使用linq函数实现动态查询,c#,linq,C#,Linq,我正在尝试实现一个代码块,它可以动态地将where子句添加到linq查询中。它完全帮助我只考虑全文框。 在我的搜索过程中,跳过空控件。现在的问题是,尽管我在Linq查询中添加了所有条件,它返回所有行并忽略where子句。 原因是什么?我如何避免这个问题 这里我有一个简单的抽象BaseEntity类,它只包含一个名为Id的字段: public abstract class BaseEntity { public virtual int Id { get; set; }

我正在尝试实现一个代码块,它可以动态地将where子句添加到linq查询中。它完全帮助我只考虑全文框。 在我的搜索过程中,跳过空控件。现在的问题是,尽管我在Linq查询中添加了所有条件,它返回所有行并忽略where子句。

原因是什么?我如何避免这个问题

这里我有一个简单的抽象BaseEntity类,它只包含一个名为Id的字段:

public abstract class BaseEntity
    {
        public virtual int Id { get; set; }
    }
My 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;
            }
        }
private void BtnSearch\u单击(对象发送者,路由目标)
{
var=newlist();
使用(var op=new OperationContext())
{
var query=op.EmailEntities;
如果(!string.IsNullOrEmpty(SearchEmailTxt.Text))
query.Where(item=>item.Address==SearchEmailTxt.Text);
如果(!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=邮件;
}
}

因为
query.Where
返回查询,而忽略结果,这就开始了。您应该更改代码,如
query=query.Where(…)

private void BtnSearch\u单击(对象发送者,路由目标)
{
var=newlist();
使用(var op=new OperationContext())
{
IQueryable query=op.EmailEntities;
如果(!string.IsNullOrEmpty(SearchEmailTxt.Text))
query=query.Where(item=>item.Address==SearchEmailTxt.Text);
如果(!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=邮件;
}
}

因为
query.Where
返回查询,而忽略结果,这就开始了。您应该更改代码,如
query=query.Where(…)

private void BtnSearch\u单击(对象发送者,路由目标)
{
var=newlist();
使用(var op=new OperationContext())
{
IQueryable query=op.EmailEntities;
如果(!string.IsNullOrEmpty(SearchEmailTxt.Text))
query=query.Where(item=>item.Address==SearchEmailTxt.Text);
如果(!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=邮件;
}
}

它不起作用。现在我有一个编译时错误:无法将类型“System.Linq.IQueryable”隐式转换为“System.Data.Entity.DbSet”。@T.shaped请尝试使用
var query=op.EmailEntities.AsQueryable()
IQueryable query=op.EmailEntities@AdilMammadov我投你一票,但你为什么不用其中一个更新答案:)@IvanStoev,你是对的,答案必须为未来用户更新。谢谢不起作用。现在我有一个编译时错误:无法将类型“System.Linq.IQueryable”隐式转换为“System.Data.Entity.DbSet”。@T.shaped请尝试使用
var query=op.EmailEntities.AsQueryable()
IQueryable query=op.EmailEntities@AdilMammadov我投你一票,但你为什么不用其中一个更新答案:)@IvanStoev,你是对的,答案必须为未来用户更新。谢谢
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;
    }
}