(我是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 |
答案 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())
如果您需要在访问关键字属性之前过滤检查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();
}