从DataContext类获取字段,但排除相关表[重复]

问题描述 投票:0回答:1

我正在尝试遍历类T,该类可能是LINQ DataContext类,也可能不是。它适用于普通类,但是当从Linq数据上下文传递数据库类时,它也会使用相关属性(如深层副本)遍历相关表。

如果它是数据库类,我将尝试获取所有“原始”字段。即它应该返回表中的所有字段。我尝试对IsPrimitive()进行过滤,但它不会返回所有字段(例如,可能会排除可空的int32等)。我也尝试过使用BindingFlags.Public和/或BindingFlags.Instance之类的方法,但无济于事。

public static T MyClone<T>(T original)
{
    T newObject = (T)Activator.CreateInstance(original.GetType());

    foreach (var originalProp in original.GetType().GetProperties())
    {
        //Do something
    }
c# linq reflection datacontext
1个回答
0
投票

尝试一下:

public static T MyClone<T>(T original)
{
    T newObject = (T)Activator.CreateInstance(original.GetType());

    PropertyInfo[] properties = typeof(DbContext).IsAssignableFrom(typeof(T))
    ? typeof(T).GetProperties().Where(p => 
        !typeof(DbContext).IsAssignableFrom(p.PropertyType)
        && (!p.PropertyType.IsGenericType || !typeof(DbContext).IsAssignableFrom(p.PropertyType.GenericTypeArguments[0])))
        .ToArray()
    : typeof(T).GetProperties();

    foreach (var originalProp in properties)
    {
        //Do something
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.