求助关于两个lis合集合并去重

qq_21420725 2021-04-14 08:41:44
List<BsonDocument> bsonList = new List<BsonDocument>();
List<BsonDocument> list= new List<BsonDocument>();

// 合并
bsonList = bsonList.Concat(list).ToList();

假设实体类
BsonDocument里面的项目为
id
code
codename

id,code相同时,只保留一个,如何实现
...全文
168 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JDD1997 2021-04-14
  • 打赏
  • 举报
回复
需要vb版的就用 https://converter.telerik.com/ 转换一下

using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main
        (
            string[] args
        )
        {
            List<BsonDocument> bsonList = new List<BsonDocument>()
                                          {
                                              new BsonDocument()
                                              {
                                                  Id       = "1",
                                                  Code     = "No.1",
                                                  Codename = "张三"
                                              },
                                              new BsonDocument()
                                              {
                                                  Id       = "2",
                                                  Code     = "No.2",
                                                  Codename = "李四"
                                              },
                                              new BsonDocument()
                                              {
                                                  Id       = "3",
                                                  Code     = "No.3",
                                                  Codename = "王五"
                                              },
                                          };

            List<BsonDocument> list = new List<BsonDocument>()
                                      {
                                          new BsonDocument()
                                          {
                                              Id       = "1",
                                              Code     = "No.1",
                                              Codename = "张三"
                                          },
                                          new BsonDocument()
                                          {
                                              Id       = "2",
                                              Code     = "No.2",
                                              Codename = "李二蛋"
                                          },
                                          new BsonDocument()
                                          {
                                              Id       = "3",
                                              Code     = "No.3",
                                              Codename = "王二小"
                                          },
                                          new BsonDocument()
                                          {
                                              Id       = "4",
                                              Code     = "No.4",
                                              Codename = "吴铁柱"
                                          },
                                      };


            var result = bsonList
                        .Concat(list)
                        .Distinct(new BsonDocumentComparer());

            foreach (var bsonDocument in result)
            {
                Debug.Print($"id:{bsonDocument.Id}\tcode:{bsonDocument.Code}\tCodename:{bsonDocument.Codename}\t");
            }
        }
    }

    class BsonDocument
    {
        public string Id       { get; set; }
        public string Code     { get; set; }
        public string Codename { get; set; }
    }

    class BsonDocumentComparer : IEqualityComparer<BsonDocument>
    {
        public bool Equals
        (
            BsonDocument x,
            BsonDocument y
        )
        {
            return x.Id == y.Id && 
                   x.Code == y.Code;
        }

        public int GetHashCode
        (
            BsonDocument obj
        )
        {
            unchecked
            {
                var hashCode = (obj.Id != null ? obj.Id.GetHashCode() : 0);
                hashCode = (hashCode * 397) ^ (obj.Code != null ? obj.Code.GetHashCode() : 0);
                return hashCode;
            }
        }
    }
}
输出结果: id:1 code:No.1 Codename:张三 id:2 code:No.2 Codename:李四 id:3 code:No.3 Codename:王五 id:4 code:No.4 Codename:吴铁柱
wanghui0380 2021-04-14
  • 打赏
  • 举报
回复
当然我们的问题在于,保留一个??保留哪一个呢??根据一般人思维我用新和旧的并,保留新的对吧 我给一个例子当然我用C#写,别问我要vb.net,10多年不写vb.net语法忘了
  public class  test
        {
            public string id { get; set; }

            public string name { get; set; }
        }

public class test比较器:IEqualityComparer<test>
        {
            public bool Equals(test x, test y)
            {
                return x.id.Equals(y.id);
            }

            public int GetHashCode(test obj)
            {
                return obj.id.GetHashCode();
            }
        }

 List<test> lstA=new List<test>();
           lstA.Add(new test()
           {
               id="1",name = "1"
           });
           lstA.Add(new test()
           {
               id = "2",
               name = "2"
           });

           List<test> lstB = new List<test>();
           lstB.Add(new test()
           {
               id = "1",
               name = "2"
           });
           lstB.Add(new test()
           {
               id = "3",
               name = "3"
           });

           var res = lstB.Union(lstA, new test比较器()).ToList();


wanghui0380 2021-04-14
  • 打赏
  • 举报
回复
合并去重其实就是并集 求并集请用Union方法
JDD1997 2021-04-14
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩 的回复:

//Lambda表达式去重法:
bsonList.Where(x,i) => bosonList.FindIndex(z => z.id == x.id and z.code == x.code) ==i);
貌似括号数量不太对
morliz子轩 2021-04-14
  • 打赏
  • 举报
回复
你这提问题,提的跟脑筋急转弯似的。 VB.NET我不经常玩,我记得VB只能用用该法ArrayList集去重。 而泛型集,是没有直接的方法,要做类型转换处理。
qq_21420725 2021-04-14
  • 打赏
  • 举报
回复
引用 1 楼 morliz子轩 的回复:

//Lambda表达式去重法:
bsonList.Where(x,i) => bosonList.FindIndex(z => z.id == x.id and z.code == x.code) ==i);
求解VB.net` 要怎么写
morliz子轩 2021-04-14
  • 打赏
  • 举报
回复

//Lambda表达式去重法:
bsonList.Where(x,i) => bosonList.FindIndex(z => z.id == x.id and z.code == x.code) ==i);

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧