LINQ to SQL Not Equals在Select语句中不工作



我在LINQ to SQL选择语句中遇到了'不等于'的问题。

我有三个单选按钮用于菜谱程序的搜索功能:常规、健康和全部。食谱有一个名为"健康"的字段,访问它的唯一方法是通过程序,并且它唯一可以拥有的是NULL或"健康"。

搜索按钮代码如下。健康和所有的工作很好,但rbRegRecipes根本没有显示任何食谱。

这不是一个连接,所有字段都来自Recipe表。

private void bnSearchRec_Click(object sender, EventArgs e)
{
string srch = txtSearchRec.Text;
using (RecipeClassesDataContext dbContext = new RecipeClassesDataContext())
{
if (rbRegRecipes.Checked == true)
{
var reclist = from r in dbContext.Recipes where r.Name.Contains(srch) && (!r.Healthy.Equals("Healthy")) select r;
dgvRecipes.DataSource = reclist;
}
else if (rbHlthRecipes.Checked == true)
{
var reclist = from r in dbContext.Recipes where r.Name.Contains(srch) && (r.Healthy == "Healthy") select r;
dgvRecipes.DataSource = reclist;
}
else
{
var reclist = from r in dbContext.Recipes where r.Name.Contains(srch) select r;
dgvRecipes.DataSource = reclist;
}
}
}

我已经尝试了以下所有方法:

!r.Healthy.Equals("Healthy")
r.Healthy != "Healthy"
!(r.Healthy == "Healthy")
(r.Healthy == null | r.Healthy == "")  // the database shows it as NULL, but the datagrid just shows it as blank, so I figured I would cover both bases. 

我做错了什么?

结果是发生了两件事。

首先,我手动添加了Healthy属性,并且没有在LINQ to SQL .dmbl中将其设置为Nullable。我是在调试程序的另一部分时发现的。

其次,在常规的SQL查询中也没有"不等于"的形式,因为Healthy属性只有两个值是Healthy和NULL。我猜NULL不是一个值,它不能等于。然而,一旦我在LINQ to SQL中修复了可空的问题,下面的工作:

var reclist = from r in dbContext.Recipes where r.Name.Contains(srch) && r.Healthy == null select r;

最新更新