0

タイプのリストが3つありますcab。比較する必要が listAありlistBます。Car-numberまたはstatusinlistBがinと同じである場合、listAその行listBlistC' else add it tolistAlistB`に追加する必要が. I need to perform that same operation for all rows forあります。これを実行するために2つのリストにラムダを書き込むにはどうすればよいですか?

これは私がこれまでに持っているコードです:

public class cab
{
    public string Name {get;set;}
    public string Desc {get;set;}
    public int Car_number   {get;set;}
    public bool status {get;set;}

}
cab c1 = new cab() { Name = "Zen",Desc = "äsdasdf",Car_number= "8832",status="false"};
cab c2 = new cab() { Name = "Ford",Desc = "sdfgedasdf",Car_number= "1132",status="true"};
cab c3 = new cab() { Name = "Swift",Desc = "sdsdf",Car_number= "732",status="true"};

List<cab> listA = new List<cab>();

listA.Add(c1);
listA.Add(c2);
listA.Add(c3);


List<cab> listB  = new List<cab>();
cab c4 = new cab() { Name = "Santro",Desc = "iisdasdf",Car_number= "8832",status="false"};
cab c5 = new cab() { Name = "Ritz",Desc = "esddf",Car_number= "132",status="true"};

listB.Add(c4);
listB.Add(c5);
List<cab> listC  = new List<cab>();
4

4 に答える 4

3

ラムダが必要な特定の理由はありますか?

これはうまくいきますか?

foreach (var bItem in listB)
{
    if (listA.Any(aItem => bItem.Car_number == aItem.Car_number || bItem.status == aItem.status))
        listC.Add(bItem);
    else
        listA.Add(bItem);
}
于 2013-03-01T05:27:38.657 に答える
0
listB.ForEach(b =>
   {
      if (listA.Any(a => a.Car_number == b.Car_number || a.status == b.status))
      {
         listC.Add(b);
      }
      else
      {
         listA.Add(b);
      }
   }
);
于 2013-03-01T05:40:00.390 に答える
0

実際にラムダ式が必要な場合は、これを試してください:

    public static void ChoiseAndAdd(Cab cab,ref List<Cab> listA,ref List<Cab> listC)
    {
        if (listA.Any(e => e.Car_number == cab.Car_number) || listA.Any(e => e.status == cab.status))
        {
            listC.Add(cab);
            return;
        }
        listA.Add(user);
    }

そして式:

listB.ForEach(e => ChoiseAndAdd(e, ref listA, ref listC));
于 2013-03-01T05:40:20.380 に答える
0
//Populate list C
listC = listA.Where(a=>  listB.Select(b=>b.Car_number).Contains(a.Car_number) && listB.Select(b => b.status).Contains(a.status)).ToList();
//Populate ListB using ListC
listB.AddRange(listA.Where(a => ! listC.Select(c => c.Car_number).Contains(a.Car_number) && ! listC.Select(c => c.status).Contains(a.status)).ToList());

注:私はここで同様の問題に遭遇し、あなたのコードを使用して私の疑問を明確にしました. これは古い質問であり、回答が既に提供されている (そして受け入れられている) ことを私は知っています。しかし、答えを探してここに来る可能性のある他の人のために、上記の解決策を投稿すると思いました。

于 2017-05-31T04:11:07.497 に答える