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的第三部分,它工作得更好,您能验证一下吗?塔恩克斯