Я пытаюсь извлечь только определенные столбцы из таблицы, используя EF, с помощью
dynamic var = new ExpandoObject.
Конечная цель состоит в том, чтобы позволить пользователю выбрать поля, которые они хотят вернуть из API, ичтобы код извлекал только эти столбцы.
Моя проблема, скажем, на основе их данных, у них есть 100 записей, мой динамический объект является ссылкой, поэтому, когда я обновляю один элемент списка, они все обновляются.
Код:
dynamic expando = new ExpandoObject();
var output = new List<ExpandoObject>();
PopulateDynamicObject(expando); // adds the columns the user had marked to include
static dynamic PopulateDynamicObject(dynamic rootObject)
{
var fields = GetLeadFields();
foreach (var field in fields)
{
AddProperty(rootObject, field.FieldName, "");
}
return rootObject;
}
// get data from database. snip
// List all fields possible but UpdateProperty will only update properties which exist, therefore it honours PopulateDynamicObject
UpdateProperty(expando, "LeadId", dbLead.leadID);
UpdateProperty(expando, "CompanyId", dbLead.companyID);
UpdateProperty(expando, "CompanyName", dbLead.company);
UpdateProperty(expando, "UnitIdentity", dbLead.unitIdentity);
UpdateProperty(expando, "BadgeId", dbLead.badgeID);
UpdateProperty(expando, "ScanDate", dbLead.scanDate);
UpdateProperty(expando, "FirstName", dbLead.firstName);
UpdateProperty(expando, "LastName", dbLead.lastName);
UpdateProperty(expando, "Company", dbLead.company);
UpdateProperty(expando, "Address1", dbLead.address1);
UpdateProperty(expando, "Address2", dbLead.address2);
UpdateProperty(expando, "Address3", dbLead.address3);
static void UpdateProperty(ExpandoObject expando, string propertyName, object propertyValue = null)
{
var expandoDict = expando as IDictionary<string, object>;
if (expandoDict.ContainsKey(propertyName))
expandoDict[propertyName] = propertyValue;
}
Но конечный результат состоит из n строк с одинаковыми данными.