我在互操作场景中,正因为如此,我正在处理结构和类,这些结构和类在不同的程序集中使用,就像结构一样——所以强制转换是不够的,必须逐个字段地手动执行,这非常无聊并且容易出错。
所以我设计了一个函数来复制大量简单的字段/属性,我只处理有问题的。
当我只对属性执行此操作时,它工作正常。但我现在需要如何修复此 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# 错误:错误 2 连接子句中的一个表达式的类型不正确。调用“Join”时类型推断失败。
编辑:我看到了值注入(inject)器,但这就像用死星杀死蚊子一样......[/编辑]
最佳答案
您的连接语句似乎正在创建 2 种不同的匿名类型,因为一种具有名为 FieldType
的属性,而另一种具有名为 PropertyType
的属性。 LINQ 无法执行连接,除非这两种类型具有完全相同的字段且顺序完全相同。关于这个有一篇精彩的文章found here .
在这种情况下,您需要为加入执行此操作:
join PDest in PropDest
on new
{
Name = POrig.Name,
JoinType = POrig.FieldType
} equals new
{
Name = PDest.Name,
JoinType = PDest.PropertyType
}
关于c# - Linq 查询从对象 B 中获取与对象 A 具有相同名称和类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034990/