Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从与另一个列表中的所有ITEN匹配的列表中获取项目_C#_Asp.net Mvc_Linq - Fatal编程技术网

C# 从与另一个列表中的所有ITEN匹配的列表中获取项目

C# 从与另一个列表中的所有ITEN匹配的列表中获取项目,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有两份清单: public class KeywordAdCategory { [Key] [Column("Ad_Id", Order = 1)] public int Ad_Id { get; set; } [Key] [Column("Category_Id", Order = 2)] public int Category_Id { get; set; } [Key] [Column("Keyword_Id", Ord

我有两份清单:

public class KeywordAdCategory
{
    [Key]
    [Column("Ad_Id", Order = 1)]
    public int Ad_Id { get; set; }

    [Key]
    [Column("Category_Id", Order = 2)]
    public int Category_Id { get; set; }

    [Key]
    [Column("Keyword_Id", Order = 0)]
    public int Keyword_Id { get; set; }
}


public IList<int> KeywordIds { get; set;}
我只需要从关键字AdCategory中提取与关键字Ad_Id 3510和5686匹配的Ad_Id,那么我应该只得到5308

到目前为止,我已经:

var matchingKac = from kac in keywordAdCategoryQuery
                  where keywordIds.Distinct().Contains(kac.Keyword_Id)
                  select kac.Ad_Id;
但它会返回关键字AdCategory中的所有记录

有什么想法吗


谢谢。

我可以通过将关键字AdCategory对象分组为匿名类型来实现这一点

var grouped = kacList.GroupBy(x => x.Ad_Id,
                              y => y.Keyword_Id,
                              (id, keywords) => new
                              { 
                                  Ad_ID = id, 
                                  Keywords = keywords.ToList()
                              });
然后我可以检查每个唯一的Ad_ID,看看它是否匹配
关键字ID
数组中的每个关键字

var resultsList = grouped.Where(x => keywordIds.All(y => x.Keywords.Contains(y)))
                         .ToList();

我可以通过将KeywordAdCategory对象分组为匿名类型来实现这一点

var grouped = kacList.GroupBy(x => x.Ad_Id,
                              y => y.Keyword_Id,
                              (id, keywords) => new
                              { 
                                  Ad_ID = id, 
                                  Keywords = keywords.ToList()
                              });
然后我可以检查每个唯一的Ad_ID,看看它是否匹配
关键字ID
数组中的每个关键字

var resultsList = grouped.Where(x => keywordIds.All(y => x.Keywords.Contains(y)))
                         .ToList();

您好,谢谢,但是您如何从关键字AdCategory构建kacList?如果我用KeywordAdCategory代替kacList,我会得到错误“错误1无法将lambda表达式转换为类型'System.Collections.Generic.IEqualityComparer',因为它不是委托类型”,有什么原因吗?”?谢谢你的问题,你使用了一个名为
关键字adCategoryQuery
的变量,我不知道它的类型,但我假设它是一个
IEnumerable
。在我的测试中,我只是使用了一个
列表
,我用一些数据模拟了它。你确定你准确地复制了我的代码吗?
GroupBy
方法有一个重载,它使用了一个
IEqualityComparer
,但它不应该尝试匹配该方法。如果您将
关键字分类查询
替换为
关键字分类查询.ToList()
,它是否有效?我已经做了一些测试,没有第一个GroupBy的第三部分,它工作得更好,您能验证一下吗?tahnksHi,谢谢,但如何从关键字AdCategory构建kacList?如果我用KeywordAdCategory代替kacList,我会得到错误“错误1无法将lambda表达式转换为类型'System.Collections.Generic.IEqualityComparer',因为它不是委托类型”,有什么原因吗?”?谢谢你的问题,你使用了一个名为
关键字adCategoryQuery
的变量,我不知道它的类型,但我假设它是一个
IEnumerable
。在我的测试中,我只是使用了一个
列表
,我用一些数据模拟了它。你确定你准确地复制了我的代码吗?
GroupBy
方法有一个重载,它使用了一个
IEqualityComparer
,但它不应该尝试匹配该方法。如果您将
关键字分类查询
替换为
关键字分类查询.ToList()
,它是否有效?我已经做了一些测试,没有第一个GroupBy的第三部分,它工作得更好,您能验证一下吗?塔恩克斯