0

我正在打电话:

var properties = person.GetType().GetProperties(BindingFlags.DeclaredOnly |
                                                        BindingFlags.Public |
                                                        BindingFlags.Instance);

这将返回我想要的内容,除了它还返回一个我不想要的名为 Updated 的属性,但我可以很容易地忽略它。它也会返回CarReferenceCar我不想包括在内。如何排除这些字段?目前,我有一个排除属性列表,如果名称与其中一个匹配,我会跳过它,但我希望它更通用而不是硬编码"CarReference""Car"例如

4

2 回答 2

0

我不知道这是否是您正在寻找的,但这里有一个可以帮助您的片段。自动生成的实体框架“实体”类的某些属性有标准:

var flags = BindingFlags.Public | BindingFlags.Instance;
var destinationProperties = typeof(TDestination).GetProperties(flags);

foreach (var property in destinationProperties)
{
    var type = property.PropertyType;

    // Ignore reference property (e.g. TripReference)
    if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(EntityReference<>))
    {
        // ...
    }

    // Ignore navigation property (e.g. Trips)
    if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(EntityCollection<>))
    {
        // ...
    }

    // Ignore ID (edmscalar) property (e.g. TripID)
    if (property.GetCustomAttributes(typeof(EdmScalarPropertyAttribute), false).Any())
    {
        // ..
    }
于 2013-10-11T08:58:47.493 回答
0

使用 PropertyType 中列出的“命名空间”属性,以下语句将跳过外部实体:if (type.Namespace != "System")

        using (var db = new Entities.YourEntities())
        {
            var originalObj = db.MyTable.FirstOrDefault();

            foreach (var prop in originalObj.GetType().GetProperties())
            {
                var type = prop.PropertyType;

                if (type.Namespace != "System")
                    continue;

                var name = prop.Name;
                var value = prop.GetValue(originalObj, null);

                //your code here
            }
        }
于 2015-10-14T15:10:33.113 回答