-1

Linqを使用して2つのリストを比較した後、タイプCampaignDetailsのリストを作成したいと思います。以下のコードスニペットをご覧ください。

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
}

CampaignDetailクラス:

public class CampaignDetail
{
    public int CampaignId { get; set; }
    public string CampaignName { get; set; }
    public string CampaignHeading { get; set; }
    public decimal OfferPrice { get; set; }
    public string CampaignDescription { get; set; }
}

ここで何が問題になっていますか?上記のコードスニペットに基づいてリストをフィルタリングできません。コンパイラの警告が表示されCampList.Add(CampL);ます:

'System.Collections.Generic.List.Add(CampaignDetails)-Method'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります。

4

4 に答える 4

2

次の方法を使用します。

 CampList.AddRange(CampL)

ただし、メソッドでLINQを使用する方が良いでしょうSelectMany

var CampList = str.SelectMany(data => sploffer
                          .Where(offer => offer.CampaignId != data.CampaignId))
                  .ToList();
于 2012-10-02T06:20:48.370 に答える
0

アイテムのリストを既存のリストに追加するメソッドをAdd使用する代わりに。AddRange

したがって、コードは次のようになります。

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
}

メソッドAddinCampList.Add(CampL)は、リストに 1 つの項目を追加するために使用されます。上記のクエリでアイテムのリスト ( ) を選択しているため、メソッドを使用して既存のリストに挿入するCampLことはできません。AddCampList

于 2012-10-02T06:21:05.650 に答える
0

CampL のタイプが CampaignDetails であることを確認してください。そうすれば、リスト タイプの CampList に追加できます。

于 2012-10-02T06:21:14.990 に答える
0
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();
于 2012-10-02T06:48:28.223 に答える