【发布时间】:2014-06-11 05:57:45
【问题描述】:
我在这件事上卡了一天,进展甚微。
我希望能够按关键字以及其他静态变量过滤产品。这些关键字任何人都可以在搜索栏中键入。当有人输入多个关键字时,我遇到了困难。如果只有一个关键字,则查询效果很好。
如何搜索多个关键字都与一个项目相关,并且只返回与关键字匹配的项目?
示例关键字:帐篷、蓝色、徒步旅行
public static List<ProductObjectModel> GetProductsByKeyword(string keywords)
{
using (TraegerEntities db = new TraegerEntities())
{
List<ProductObjectModel> lstObj = new List<ProductObjectModel>();
if (!string.IsNullOrEmpty(keywords))
{
string[] keyword = keywords.Split(',');
var lstAnon = (
from r in db.Products
join i in db.ProductImages on r.ProductId equals i.ProductId
join c in db.ProductCategories on r.ProductId equals c.ProductId
join cl in db.ProductCategoryList on c.ProductCategoryListId equals cl.ProductCategoryListId
join k in db.ProductKeywords on r.ProductId equals k.ProductId
join kl in db.ProductKeywordList on k.ProductKeywordListId equals kl.ProductKeywordListId
where r.Archive == false
where i.SmallImage == true
where keyword.Any(kw => kl.Keyword.Contains(kw))
group new
{
Products = r,
ProductCategoryList = cl,
ProductImages = i,
ProductKeywordList = kl
} by r.ProductId
).ToList();
}
foreach (var item in lstAnon.Skip(beginRange).Take(endRange))
{
ProductObjectModel obj = new ProductObjectModel();
obj.ProductDetails = item.First().Products;
obj.CategoryList = item.First().ProductCategoryList;
obj.Images = item.First().ProductImages;
obj.KeywordList = item.First().ProductKeywordList;
lstObj.Add(obj);
}
return lstObj;
}
}
【问题讨论】:
-
你能申请
.Contains()还是我相信这只是为了 linq-to-sql。 -
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
JohnSaunders 我听你一遍又一遍地说,你应该编写一个自动插入此评论的用户脚本:)。
-
@JonH,他可能有一个,有一个插件可以让你指定自己的“自动”评论,所以只需点击两次即可发布:)
-
@JonH,在 .Any()
where keyword.Any(kw => kl.Keyword.Contains(kw))我正在使用.Contains。是不是因为我的关键字在一个数组中,所以它只找到第一个关键字?
标签: c# linq entity-framework lambda