使用预先存在的iqueryable过滤Entity Framework上的另一个iqueryable

时间:2011-03-28 03:02:14

标签: c# entity-framework linq-to-entities iqueryable

我有很多关系(Sites,Categories,CategoriesXSite),我需要通过某些网站名称过滤所有类别,所以我做了我的功课并制作了这个linq:

var filteredcategories = from c in context.Categories
                       from s in c.Sites
                       where s.Name.Contains(siteWord)
                       select c;   

它工作得很好,问题是我已经有了一个过滤网站的方法,我希望像这样重用它:

var filteredcategories = from c in context.Categories
                       where c. Sites == FilterSites(siteWord)
                       select c; 

这是我的过滤方法:

public IQueryable<Site> FilterSites(string word)
{
      return (from s in context.Sites
              where s.Name.Contains(word)
              select s);
}

这有可能实现吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

如果您的网站具有类别的导航属性,您可以尝试:

var filteredcategories = FilterSites(siteWord).SelectMany(s => s.Categories);

答案 1 :(得分:0)

如果我正确理解您的要求,您只需从FilterSites返回的IQueryable对象中选择即可完成您想要的任务,例如:

var filteredcategories = from c in FilterSites(siteWord) select c; 

我从不使用linq查询语法......我认为这样可以得到你想要的...方法语法如下:

var filteredcategories = FilterSites(siteWord).Where(s => s.Something = "something");