1

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

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

我在那里有记录,但有些在“关键字”字段中没有任何条目。我想让我的用户根据这两列过滤记录。

我的代码在这里:

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 不为空且不等于“站点 url”,则在 [SiteURL] 中搜索已输入 txtFilterBy_SiteURL.Value 的任何内容

如果 txtFilterBy_KeyWord.Value 不为空且不等于“关键字”,则将 [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  |
4

3 回答 3

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();
于 2013-05-08T10:44:11.073 回答
0
Publishers = db.Publishers.Where(p =>
             p.Keywords.ToLower().Contains(p.Keywords.ToLower()) || String.IsNullOrEmpty(p.Keywords))
             ).ToList();

如果关键字是一个字符串。

于 2013-05-07T14:09:59.657 回答
0

对于非空关键字,此行始终为真p.Keywords.ToLower().Contains(p.Keywords.ToLower())

如果您需要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();
}
于 2013-05-07T14:14:51.943 回答