代码之家  ›  专栏  ›  技术社区  ›  Aaron

linq to sql many to many int id数组条件查询

  •  0
  • Aaron  · 技术社区  · 16 年前

    好吧,这应该很简单,但我在这里做我的头,已经阅读了所有关于这方面的文章,尝试了各种各样的事情,但没有运气。

    我在一个经典的多对多设置中有3个表。

    项目 项目 描述

    项目特征 项目 特征码

    特征 特征码 描述

    现在我有了一个搜索界面,您可以在其中选择任意数量的功能(复选框)。 我把它们都当作一个名为searchFeatures的int[]很好地得到。

    我只想找到搜索功能中包含功能的项目。

    例如:

    return db.Items.Where(x => SearchFeatures.Contains(x.ItemFeatures.AllFeatures().FeatureID))
    

    在items分部类中,我添加了一个自定义方法features(),它只返回该项的所有功能,但我仍然无法以任何可用的方式将其集成到主LINQ查询中。

    GRR,一定很简单,在SQL中只有一秒钟的任务。多谢。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Steven    16 年前

    下面的查询将返回基于 searchFeatures :

    from itemFeature in db.ItemFeatures
    where searchFeatures.Contains(itemFeature.FeatureID)
    select itemFeature.Item;
    

    这里的诀窍是从 ItemFeatures 表。


    正如您在评论中所要求的,可以搜索具有所有功能的项目。这里的技巧是动态构建查询。请参见这里:
    var itemFeatures = db.ItemFeatures;
    
    foreach (var temp in searchFeatures)
    {
        // You will need this extra variable. This is C# magic ;-).
        var searchFeature = temp;
    
        // Wrap the collection with a filter
        itemFeatures =
            from itemFeature in itemFeatures
            where itemFeature.FeatureID == searchFeature
            select itemFeature;
    }
    
    var items =
        from itemFeature in itemFeatures
        select itemFeature.Item;