我有一个查询dbContext并根据返回的内容创建匿名类型的方法:
<note>
然后,我创建一个新的匿名类型列表,以添加额外的属性(“ ExtDescription”),该属性是由其他方法根据原始对象的属性组成的字符串:
var items = (from l in db.JDE_Logs
join u in db.JDE_Users on l.UserId equals u.UserId
join t in db.JDE_Tenants on l.TenantId equals t.TenantId
where l.TenantId == tenants.FirstOrDefault().TenantId && l.Timestamp >= dFrom && l.Timestamp <= dTo
orderby l.Timestamp descending
select new
{
LogId = l.LogId,
Timestamp = l.Timestamp,
TenantId = t.TenantId,
TenantName = t.TenantName,
UserId = l.UserId,
UserName = u.Name + " " + u.Surname,
Descripiton = l.Description,
OldValue = l.OldValue,
NewValue = l.NewValue
});
我的问题是我想将此代码(创建额外的属性)移动到另一个方法,因此我可以从主代码中多次调用它。我想到了这样的东西:
var nItems = new List<object>();
//try to get more details
foreach (var i in items)
{
string desc = GetLogDescription(i.NewValue, i.OldValue, i.Descripiton);
var nItem = new
{
LogId = i.LogId,
Timestamp = i.Timestamp,
TenantId = i.TenantId,
TenantName = i.TenantName,
UserId = i.UserId,
UserName = i.UserName,
Descripiton = i.Descripiton,
OldValue = i.OldValue,
NewValue = i.NewValue,
ExtDescription = desc
};
nItems.Add(items);
}
不幸的是,它无法构建,因为对象“ i”不包含属性的定义,例如i.OldValue。这是完全相同的代码,但是只是放入外部方法中就使它坏了。我最好的猜测是应该将List传递给该方法,而不是其他。我检查了一下,原始项目的类型为System.Data.Entity.Infrastructure.DbQuery,但它无处可寻。