是否有一种方法可以从条目中获取每个值.首先在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表
如果我正确理解了你的问题,那么你要循环遍历实体集合中的项目。一种方法是将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, ', ') + ")");
这对你有帮助吗?