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