我在一个互操作场景中,因此我正在处理类似结构的结构和类在不同的程序集中使用 - 所以一个演员阵容是不够的,必须手动场地,这是非常无聊和容易出错。Linq查询从对象B获得具有相同名称和类型的对象的属性A
因此,我设计了一个功能,可以复制大量简单的字段/属性,而且我只处理困扰的字段/属性。
当我这样做属性只,它工作正常。但我现在需要如何解决这个LiNQ
查询,以便能够从源对象中获取字段列表并将它们与目标对象上的属性连接起来。下面
代码:
var TypeOrig = pSource.GetType();
var TypeDest = pTarget.GetType();
var TypeString = typeof(System.String);
var PropOrig = TipoOrig.GetFields(); // if it is GetProperties instead
// of GetFields works OK
var PropDest = TipoDest.GetProperties();
var QryPropVT =
from
POrig in PropOrig
join PDest in PropDest
on new
{
POrig.Name,
POrig.FieldType
} equals new
{
PDest.Name,
PDest.PropertyType
}
where POrig.PropertyType.IsValueType || (POrig.PropertyType.Equals(TipoString))
select new
{
PropO = POrig,
PropD = PDest
};
Visual C# error: Error 2 The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.
编辑:我看到了价值注入,但它像使用死星杀蚊子... [/编辑]
他们会始终* *是在目标类型的原始类型和属性字段?或者可能会有混合?另外,如果你遵循正常的.NET命名约定,并且使用'camelCase'作为你的局部变量,你的代码将更容易阅读... – 2013-02-26 07:16:31
@JonSkeet:_或者可能有混合?_在创建这个函数中,I涵盖了这两种情况。 _你遵循正常的.NET命名约定_我每天都在三个不同的平台上编程,当我必须从头开始创建代码时,我很努力地传达了最近的惯例。最后,尝试创造的混乱让我选择了一个惯例 - – 2013-02-26 13:05:30
@JonSkeet:(续)我可以不必停下来再调整:pascal对象。上面的代码是我在工作中完成的真实代码的摘录。当我在SO上发布时,我会尝试传达给.NET约定...... – 2013-02-26 13:12:03