私は相互運用シナリオに取り組んでおり、そのため、さまざまなアセンブリで構造のように使用される構造とクラスを扱っています。そのため、キャストは十分ではなく、フィールドごとに手動で行う必要があり、非常に退屈でエラーが発生しやすくなっています。 .
そこで、大量の単純なフィールド/プロパティをコピーする関数を考案し、問題のあるものだけを処理しました。
これをプロパティに対してのみ行うと、問題なく動作します。しかし、このクエリを修正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'.
編集:バリューインジェクターを見ましたが、デススターを使って蚊を殺すようなものです... [/編集]