Here is a nice little C# extension method that allows you to copy all of the properties from one object to another where the names match.
SetPropertiesByName(this object target, object source)
PropertyInfo sourceProperties = source.GetType().GetProperties();
PropertyInfo targetProperties = target.GetType().GetProperties();
foreach (PropertyInfo targetField in targetProperties)
PropertyInfo sourceProperty =
(sourceProperties.Where(f => f.Name == targetField.Name)).FirstOrDefault();
targetField.SetValue(target, sourceProperty.GetValue(source, null), null);
The usage looks this…
I was using AutoMapper for this, but it was overkill for what I needed.
LINQ (Language-Integrated Query) is supported on the Compact Framework. However, like with every other technology on CF, there is stuff you might that isn’t there. In my case, it’s LINQ to SQL. System.Data.Linq is not provided on the Compact Framework.
Also, contrary to some reports, the Entity Framework 3.5 is not provided on the Compact Framework, either.
This was way harder to figure out than it should have been, so for the next person that needs to reference an input file in a T4 template by its relative path, here is what you need to do…
1. Include T4Toolbox.tt…
<#@ include file=”T4Toolbox.tt” #>
2. Add hostspecific=”True” to your template setting…
<#@ template language=”C#” hostspecific=”True” #>
3. Import EnvDTE…
<#@ import namespace=”EnvDTE” #>
4. Now TransformationContext.Host.ResolvePath(“SomeFile.sdf”) will return the absolute path of “SomeFile.sdf”.