C# 通过比较具有某些条件的两个列表筛选列表

C# 通过比较具有某些条件的两个列表筛选列表,c#,asp.net,.net,linq,C#,Asp.net,.net,Linq,在通过Linq将两个列表进行比较之后,我想准备一个类型活动详细信息列表。您可以在下面看到代码片段: List<CampaignDetails> str = service.GetActiveCampaignBySubCatId(lang, subCatId); //List1 List<CampaignDetails> sploffer = service.GetSpecialOfferCampaignsForMobile(lang); // List2 List&l

在通过Linq将两个列表进行比较之后,我想准备一个类型活动详细信息列表。您可以在下面看到代码片段:

List<CampaignDetails> str = service.GetActiveCampaignBySubCatId(lang, subCatId);  //List1
List<CampaignDetails> sploffer = service.GetSpecialOfferCampaignsForMobile(lang); // List2

List<CampaignDetails> CampList = new List<CampaignDetails>();        
foreach (var data in str)
{
    var CampL = (from offer in sploffer
                where offer.CampaignId != data.CampaignId
                select offer).ToList();
    CampList.Add(CampL);  // getting red mark here
}
这里怎么了?我无法根据上述代码片段筛选列表。我在
CampList.Add(CampL)上收到编译器警告

匹配的最佳重载方法 'System.Collections.Generic.List.Add(活动详细信息)-方法' 有一些无效的参数

使用此方法:

 CampList.AddRange(CampL)
但如果将LINQ与
SelectMany
方法结合使用会更好:

var CampList = str.SelectMany(data => sploffer
                          .Where(offer => offer.CampaignId != data.CampaignId))
                  .ToList();

插入
Add
使用方法将项目列表添加到现有列表中

因此,您的代码应该是:

foreach (var data in str)
{
    var CampL = (from offer in sploffer
                where offer.CampaignId != data.CampaignId
                select offer).ToList();
    CampList.AddRange(CampL);  // here change it to AddRange
}

方法
CampList中的
Add
。Add(CampL)
用于将单个项目添加到列表中。由于您在上面的查询中选择了项目列表(
CampL
),因此不能使用
Add
方法插入现有列表
CampList

确保CampL属于活动详细信息类型,然后您可以将其添加到类型列表的CampList中。

-1因为没有提供错误消息和涉及的类型。我只是根据某些条件比较两个列表,准备一个列表。我现在无法运行我的项目。但是在我提到的那条线上得到了redmark。我的问题很简单,就是你们所有人。为什么你会把分数降到你什么都不知道的程度呢?这就是为什么你会投否决票的原因。“此处出现红色标记”并不是对错误的详尽描述。事实上,你甚至掩盖了评论中有例外的事实。使用
var
也没有什么帮助,因为我们既不知道
getActiveActivityBySubcatId
getSpecialOfferCompagingsFormobile
的签名(即返回类型),也不知道
ActivityDetails
的定义下一次会处理这个问题。请投票,并将提出关于这一点的另一个职位。谢谢您甚至可以在发布问题/答案后改进它们,只需使用编辑功能。我喜欢您的第二种方法,但列表中会出现重复条目。如何从您提到的上述代码列表中进行区分。@VedankKulshrestha:您想用字段区分什么?你是如何用你的方法进行区分检查的?实际上你的代码给出了1959个条目,即(14*140)-1“列表1中的14个条目”和“列表2中的140个条目”,“1=条件匹配的数量”上面的代码给出了重复,即14*140-1。我希望列表(14项-1)不重复上面的模式,因为列表是这样的14+14+14+13(条件匹配)+14+14+等等,直到列表中的1959项。。我想要(13项列表)中的条件匹配,如上文所述comment@VedankKulshrestha:不太了解,如何区分选项
AddRange
?如果要使用LINQ进行区分,则需要显示类
提供
以及需要区分的属性。发布另一个问题
var CampList  = from data in str
                from offer in sploffer
                where offer.CampaignId != data.CampaignId
                select offer;

//in case you want to materialize it,
//or in case you really need a list,
//but this could be unnecessary
CampList = CampList.ToList();
var CampList  = from data in str
                from offer in sploffer
                where offer.CampaignId != data.CampaignId
                select offer;

//in case you want to materialize it,
//or in case you really need a list,
//but this could be unnecessary
CampList = CampList.ToList();