Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从另一个集合更新集合的有效方法_C#_.net_Linq_Collections_Observablecollection - Fatal编程技术网

C# 从另一个集合更新集合的有效方法

C# 从另一个集合更新集合的有效方法,c#,.net,linq,collections,observablecollection,C#,.net,Linq,Collections,Observablecollection,以下从另一个可观测集合更新的方法(两者都基于同一个类)足够好吗?或者最好用另一种方法(或者只是为了改进) EntID是主键。 (在“足够好”一词中,我指的是快速高效) 如果myItem和c是不同的类型,请查看AutoMapper 如果myItem和c是不同的类型,请查看AutoMapper。作为补充答案,您可以使用反射将N个字段从一个对象复制到另一个对象。我已经在这里谈过了: 您可以让您的类(SomeClass)实现此代码(两个对象是同一个类): 这样,如果你的类有了新的属性,你就不必费心更新代

以下从另一个
可观测集合更新
的方法(两者都基于同一个类)足够好吗?或者最好用另一种方法(或者只是为了改进)

EntID
是主键。
(在“足够好”一词中,我指的是快速高效)

如果
myItem
c
是不同的类型,请查看AutoMapper


如果
myItem
c
是不同的类型,请查看AutoMapper。

作为补充答案,您可以使用反射将N个字段从一个对象复制到另一个对象。我已经在这里谈过了:

您可以让您的类(SomeClass)实现此代码(两个对象是同一个类):

这样,如果你的类有了新的属性,你就不必费心更新代码了,它已经存在了


对于具有不同类的对象,也可以通过属性名称的反射来实现,但是您必须做出一些假设(如果属性不存在,什么属性是不同的类型,什么是属性值为空,等等)

作为补充答案,可以使用反射将N个字段从一个对象复制到另一个对象。我已经在这里谈过了:

您可以让您的类(SomeClass)实现此代码(两个对象是同一个类):

这样,如果你的类有了新的属性,你就不必费心更新代码了,它已经存在了


对于具有不同类的对象,也可以通过属性名称的反射来实现,但是您必须做出一些假设(如果属性不存在,什么属性是不同的类型,什么是属性值是空的,等等)

看起来更好,并且通过不查找每个属性的项节省了很多。空检查也避免了潜在的崩溃错误。看起来更漂亮,并且通过不查找每个属性的项节省了很多。空检查还可以避免潜在的崩溃错误。是否需要将collection2中的新项目添加到collection1?删除不在集合2中但在集合1中的项目如何?这些使解决方案有点复杂,但没有那么困难。@CMP谢谢。是的,最后我需要做你提到的所有事情。只是想让示例更简单,以了解该方法的本质。是否需要将collection2中的新项目添加到collection1中?删除不在集合2中但在集合1中的项目如何?这些使解决方案有点复杂,但没有那么困难。@CMP谢谢。是的,最后我需要做你提到的所有事情。只是想让示例更简单,以了解方法的本质。是的,确实如此。应该用智慧来使用。如果他复制了100个对象,这是不可察觉的(多1-2毫秒)。对于1000,大约需要30-40毫秒。对于10.000、300-350毫秒以上的时间,眉毛会竖起来。它的臭气刚开始超过10万。因此,请谨慎使用。Obs.:来自基准应用程序的数据。是的。应该用智慧来使用。如果他复制了100个对象,这是不可察觉的(多1-2毫秒)。对于1000,大约需要30-40毫秒。对于10.000、300-350毫秒以上的时间,眉毛会竖起来。它的臭气刚开始超过10万。因此,请谨慎使用。Obs.:来自基准应用程序的数据。
foreach (MyEntity c in collection2)
    {
       collection1.Where(p => p.EntID == c.EntID).FirstOrDefault().Field1 = c.Field1;
       collection1.Where(p => p.EntID == c.EntID).FirstOrDefault().Field2 = c.Field2;
       ...
       collection1.Where(p => p.EntID == c.EntID).FirstOrDefault().FieldN = c.FieldN;         
    }
   var myItem = collection1.Where(p => p.EntID == c.EntID).FirstOrDefault();
   if (myItem == null)
       continue;
   myItem.Field1 = c.Field1;
   myItem.Field2 = c.Field2;
   ...
   myItem.FieldN = c.FieldN;
public void CopyPropertiesFrom(SomeClass SourceInstance)
{
    foreach (PropertyInfo prop in typeof(SomeClass).GetProperties())
        prop.SetValue(this, prop.GetValue(SourceInstance, null), null);
}