是否有一种方法可以从条目中获取每个值.首先在ef code中收集

本文关键字:获取 code ef 一种 方法 是否 | 更新日期: 2023-09-27 18:10:48

我目前有以下代码:

 System.Reflection.PropertyInfo[] names = _entity.GetType().GetProperties();
            var entry = this.Entry(_entity);
            foreach (var property in names)
            {
                var m = entry.Member(property.Name);
                if (m is DbPropertyEntry)//simple property
                {
                    var p = entry.Property(property.Name);
                    currentVal.Add(p.CurrentValue.ToString());
                }
                if (m is DbReferenceEntry)//navigation to single object
                {
                    var r = entry.Reference(property.Name);
                    currentVal.Add(r.CurrentValue.ToString());
                }
                if (m is DbCollectionEntry)//navigation to collection
                {
                    var c = entry.Collection(property.Name);
                    currentVal.Add(c.CurrentValue.ToString());               
                }
            }

我想从与我的实体相关联的集合中获得每个字段值,但是entry.Collection(property.Name)只返回集合名称,而不是该集合中的字段,例如名称,id等。因此,我无法实际获取集合中的当前值。

任何建议都非常感谢!由于

编辑:

我正在使用的实体设置如下:

 public class Project
    {
        public int Id { get; set; } // PK
        public string Name { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public int MarketId { get; set; } // FK
        [ForeignKey("MarketId")]
        public Market Market { get; set; } // FK Nav   
        public ICollection<Team> Teams { get; set; } // Many to Many Nav 
    }

我希望查看的集合是Teams,我正在对这个实体进行审计,当创建新项目时,我希望看到Teams表

是否有一种方法可以从条目中获取每个值.首先在ef code中收集

中相关项目id的更新值。

如果我正确理解了你的问题,那么你要循环遍历实体集合中的项目。一种方法是将c.CurrentValue强制转换为IEnumerable,然后使用foreach循环遍历enumerable。

foreach(var x in (IEnumerable) c.CurrentValue){
  // do something with the entity here
}

它会给你集合中的实体。根据你想对它们做什么,你可以ToString()实体本身,或者递归地使用你发布的代码来获取它们的属性值。

需要注意的一点是EF并不会急切地加载集合属性。因此,可能是集合在内存中是空的,而在DB中不是空的。DbCollectionEntry类型有一个IsLoaded属性来检查这个

嗯,我认为你想让一个基于字符串数组的Select,这是属性的名称。我说的对吗?

你试过使用Linq Dynamic吗?http://dynamiclinq.azurewebsites.net/。它允许您使用字符串表达式构造LINQ查询。

var result = myQuery
    .Select("new (Field1, Field2)");
//in your case
 var result2 = myQuery
    .Select("new (" + string.Join(fields, ', ') + ")");

这对你有帮助吗?