在Linq中过滤Sql表数据

时间:2011-02-09 15:06:33

标签: c# asp.net linq-to-sql

我是Linq的新手,我正在使用

搜索文章
DBSearchDataContext db = new DBSearchDataContext();

        object q = from b in db.Articles
                   where b.Tags.Contains(val) |
                   b.NewsTitle.Contains(val) |
                   b.EnglishContent.Contains(val)
                   select b;

我无法排除类别=视频或照片的结果

请帮我排除值为“视频”或“照片”的类别

4 个答案:

答案 0 :(得分:1)

实际上我们需要有关您问题的更多信息。如果我们说,你有一个名为带有ID PK(int)列的类别的表。您需要搜索

1 - 视频

2 - 照片

DBSearchDataContext db = new DBSearchDataContext();

    var q = (from b in db.Articles
               where 
               b.CategoryId == 1 // This is returns Videos category
               select b).ToList();

我无法写出确切的答案,但这会告诉你一个方法。

所以您的查询可以是;

var q = (from b in db.Articles
                   where 
                   (b.Tags.Contains(val) ||
                   b.NewsTitle.Contains(val) ||
                   b.EnglishContent.Contains(val))
                   &&
                   b.CategoryId == 1
                   select b).ToList();

如果您提供有关如何找到类别(有关系或枚举)的更多信息,我可以改进我的答案。

答案 1 :(得分:1)

DBSearchDataContext db = new DBSearchDataContext();          
object q = from b in db.Articles                    
           where 
           (b.Tags.Contains(val) ||                    
           b.NewsTitle.Contains(val) ||                    
           b.EnglishContent.Contains(val)) && 
           !( b.SomeCategoryList.Containts("videos") || b.SomeCategoryList.Contains("photos") )
           select b; 

答案 2 :(得分:1)

DBSearchDataContext db = new DBSearchDataContext();

    object q = from b in db.Articles
               where b.Tags.Contains(val) |
               b.NewsTitle.Contains(val) |
               b.EnglishContent.Contains(val)
               && ( !b.category.Contains(videos) && !b.category.Contains(Photographs))
               select b;

也许是这样的......

答案 3 :(得分:0)

您应该将|改为||,这是正确的OR条件。

要排除它,你需要一些谎言(基于数据库中类别的位置的假设):

DBSearchDataContext db = new DBSearchDataContext();
       object q = from b in db.Articles
                  where (b.Tags.Contains(val) ||
                         b.NewsTitle.Contains(val) ||
                         b.EnglishContent.Contains(val)) &&
                  !(b.Category != "Videos" && b.Category != "Photos")
                  select b;