使用LINQ比较每个类属性值

时间:2016-08-17 04:20:49

标签: c# asp.net-mvc linq

我有一个以下课程。我将得到两个对象$contentList<Client> data1。我想将data1和data2与每个属性值进行比较。

例如,如果data1对象具有LastName = a和ClientId = 1,.. etc,并且如果data2列表具有相同的数据集,我想将其推送到另一个列表中。 任何想法,我们如何使用LINQ / Minimal代码实现这一目标?

List<Client> data2

4 个答案:

答案 0 :(得分:1)

使用Intersect

    List<Client> data1 = new List<Client>();
    List<Client> data2 = new List<Client>();
    List<Client> newlst = new List<Client>();

    Client obj = new Client();
    obj.ClientId = 1;
    obj.LastName = "a";
    obj.FirstName = "n";
    obj.Email = "e";

    data1.Add(obj);
    data2.Add(obj);

    obj = new Client();
    obj.ClientId = 2;
    obj.LastName = "a";
    obj.FirstName = "f";
    obj.Email = "e";

    data1.Add(obj);
    newlst = data1.Intersect(data2).ToList();

答案 1 :(得分:1)

我使用了IEqualityComparer,用于比较集合和Intersect将给出公共值。我已经测试了几个场景的代码。您可以检查所有方案。

希望这段代码会有所帮助。

namespace UnitTestProject
{
    [TestClass]
    public class CompareTwoGenericList
    {
        [TestMethod]
        public void TestMethod1()
        {
            var coll = GetCollectionOne();
            var col2 = GetCollectionTwo();

            //Gives the equal value
            var commonValue = coll.Intersect(col2, new DemoComparer()).ToList();

            //Difference
            var except=coll.Except(col2, new DemoComparer()).ToList();
        }

        public List<Demo> GetCollectionOne()
        {
            List<Demo> demoTest = new List<Demo>()
            {
                new Demo
                {
                    id=1,
                    color="blue",
                },
                new Demo
                {
                    id=2,
                    color="green",
                },
                new Demo
                {
                    id=3,
                    color="red",
                },
            };

            return demoTest;
        }

        public List<Demo> GetCollectionTwo()
        {
            List<Demo> demoTest = new List<Demo>()
            {
                new Demo
                {
                    id=1,
                    color="blue",
                },
                new Demo
                {
                    id=2,
                    color="green",
                },
                new Demo
                {
                    id=4,
                    color="red",
                },
            };

            return demoTest;
        }
    }

    // Custom comparer for the Demo class
    public class DemoComparer : IEqualityComparer<Demo>
    {
        // Products are equal if their color and id are equal.
        public bool Equals(Demo x, Demo y)
        {
            //Check whether the compared objects reference the same data.
            if (Object.ReferenceEquals(x, y)) return true;

            //Check whether any of the compared objects is null.
            if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                return false;

            //Check whether the demo properties are equal.
            return x.color == y.color && x.id == y.id;
        }

        // If Equals() returns true for a pair of objects
        // then GetHashCode() must return the same value for these objects.

        public int GetHashCode(Demo demo)
        {
            //Check whether the object is null
            if (Object.ReferenceEquals(demo, null)) return 0;

            //Get hash code for the color field if it is not null.
            int hashColor = demo.color == null ? 0 : demo.color.GetHashCode();

            //Get hash code for the id field.
            int hashId = demo.id.GetHashCode();

            //Calculate the hash code for the product.
            return hashColor ^ hashId;
        }
    }
}

答案 2 :(得分:1)

创建新类ClientView

public class ClientView{
 public int ClientId { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Email { get; set; }
}

列出lst = new List();

                var data = from n in db.client

                           select new ClientView()
                           {
                               ClientId = n.ClientId ,
                               LastName = n.LastName ,
                               FirstName = n.FirstName,

                           };
               var data1 = from n in db.client

                           select new ClientView()
                           {
                               ClientId = n.ClientId ,
                               LastName = n.LastName ,
                               FirstName = n.FirstName,

                           };
                lst.AddRange(data);
                lst.AddRange(data1);

List<ClientView> lst1 = new List<ClientView>();
                foreach (var singlelst in lst)
                {

                    ClientView newClient = new ClientView ();
                    newClient.Id = singlelst.Id;
                    newClient.આપેલ = singlelst.LastName;
                    newClient.આપેલતારીખ = singlelst.FirstName;
                    lst1.Add(newClient);
                }

答案 3 :(得分:0)

试试这个:

public IEnumerable<PropertyInfo> GetVariance(Client user)
{
    foreach (PropertyInfo pi in user.GetType().GetProperties()) {

        object valueUser = typeof(Client).GetProperty (pi.Name).GetValue (user);
        object valueThis = typeof(Client).GetProperty (pi.Name).GetValue (this);

        if (valueUser != null && !valueUser.Equals(valueThis))
            yield return pi;

    }
}

IEnumerable<PropertyInfo> variances = data1.GetVariance (data2);

foreach (PropertyInfo pi in variances)
      Console.WriteLine (pi.Name);