尽管字段为空,但返回记录

时间:2013-05-07 14:05:48

标签: c# entity-framework entity-framework-5

(我是Entity Framework的新手,如果这是一个简单的问题,请道歉!)

在我的数据库表中,我有一个标题为[SiteURL]的列和另一个[关键字]

我有记录,但有些记录在关键字字段中没有。 我想让我的用户根据这两列来过滤记录。

我的代码在这里:

Publishers = db.Publishers.Where(p =>
                      p.isActive == true
                  && p.SiteURL.ToLower().Contains(((txtFilterBy_SiteURL.Value.Length > 0) && (txtFilterBy_SiteURL.Value.ToLower() == "site url")) ? p.SiteURL.ToLower() : txtFilterBy_SiteURL.Value.ToLower())
                  && p.Keywords.ToLower().Contains(((txtFilterBy_KeyWord.Value.Length > 0) && (txtFilterBy_KeyWord.Value.ToLower() == "keyword")) ? p.Keywords.ToLower() : txtFilterBy_KeyWord.Value.ToLower())
                    ).ToList();

我想说:

如果txtFilterBy_SiteURL.Value不为空且不等于“site url”,则搜索[SiteURL]以查找已输入txtFilterBy_SiteURL.Value的任何内容

如果txtFilterBy_KeyWord.Value不为空并且不等于“keyword”,则在条件列表中包含[Keywords],以便输入txtFilterBy_KeyWord.Value。

  ID  |  SiteURL  | Keywords  |
   1  |  Rod.org  | Travel    |
   2  |  jane.com |           |
   3  |  fred.com | motoring  |

因此,如果用户在txtFilterBy_SiteURL中输入“.com”,我想返回

  ID  |  SiteURL  | Keywords  |
   2  |  jane.com |           |
   3  |  fred.com | motoring  |

如果用户在txtFilterBy_SiteURL中输入“.com”并在txtFilterBy_KeyWord文本框中输入“mot”,我想:

  ID  |  SiteURL  | Keywords  |
   3  |  fred.com | motoring  |

3 个答案:

答案 0 :(得分:1)

您可以尝试使用一些布尔逻辑来从数据库中获取发布者。下面是在LINQ to SQL中,但它也应该工作。为下面的代码看起来的方式道歉,无法让长单行在这里显示好...

Publishers = (from p in db.Publishers
              where p.isActive == true &&
              p.SiteURL.ToLower().Contains(((txtFilterBy_SiteURL.Value.Length > 0) &&
                  (txtFilterBy_SiteURL.Value.ToLower() == "site url")) ?                   
                  p.SiteURL.ToLower() : txtFilterBy_SiteURL.Value.ToLower())  &&
              (p.Keywords == null || p.Keywords == "" ||  
                  p.Keywords.ToLower().Contains(((txtFilterBy_KeyWord.Value.Length > 0)               
              &&   
              (txtFilterBy_KeyWord.Value.ToLower() == "keyword")) ?      
                  p.Keywords.ToLower() : txtFilterBy_KeyWord.Value.ToLower()))
              select p).ToList();

答案 1 :(得分:0)

Publishers = db.Publishers.Where(p =>
             p.Keywords.ToLower().Contains(p.Keywords.ToLower()) || String.IsNullOrEmpty(p.Keywords))
             ).ToList();

如果KeyWords是一个字符串。

答案 2 :(得分:0)

对于非空关键字p.Keywords.ToLower().Contains(p.Keywords.ToLower())

,此行始终为true

如果您需要在访问关键字属性之前过滤检查null,然后选中contains

Publishers = db.Publishers.Where(p => String.IsNullOrEmpty(p.Keywords) &&
             p.Keywords.ToLower().Contains("stringToSearch")
             ).ToList();

修改

// get all data
Publishers = db.Publishers.ToList();

// filter by site url 
if(!String.IsNullOrEmpty(txtFilterBy_SiteURL.Text))
{
    Publishers = Publishers.Where(p => String.IsNullOrEmpty(p.SiteURL) &&
                 p.SiteURL.ToLower().Contains(txtFilterBy_SiteURL.Text)
                 ).ToList();
}
// filter by keyword 
if(!String.IsNullOrEmpty(txtFilterBy_KeyWord.Text))
{
    Publishers = Publishers.Where(p => String.IsNullOrEmpty(p.Keywords) &&
                 p.Keywords.ToLower().Contains(txtFilterBy_KeyWord.Text)
                 ).ToList();
}