如何在不单独浏览每个类属性的情况下执行此操作?我有一个包含54个属性的类,我想通过它从CosmosDB中检索值,然后使用每个属性中的Distinct值在视图中创建一个dropdownfo。
我可以单独完成它们 - 这段代码工作正常。但要为所有属性做到这一点......必须有一种更简单的方法。
我必须使用bankCountryCode
,Currency
等来完成此操作。类FieldMasterInfo
的所有属性。
IEnumerable<string> fieldId = allItems.Select(m => m.FieldId).Distinct();
var fieldSL = new List<SelectListItem>();
foreach (var element in fieldId)
{
// adding null check here until cosmos db with null tenant id's for tax are removed.
if (element != null)
{
fieldSL.Add(new SelectListItem
{
Value = element.ToString(),
Text = element.ToString()
});
}
}
fieldSL = fieldSL.OrderBy(x => x.Text).ToList();
ViewBag.fieldIdList = fieldSL;
这完美无缺。它遍历一个类并获取每个属性的不同值并将其放入字典&gt;
FieldMasterInfo fmi = new FieldMasterInfo();
PropertyInfo[] properties = fmi.GetType().GetProperties();
Dictionary<string, IEnumerable<object>> sl = new Dictionary<string, IEnumerable<object>>();
foreach (PropertyInfo property in properties)
{
sl[property.Name] = allItems.Select(m => m.GetType().GetProperty(property.Name).GetValue(m, null)).Distinct();
}
答案 0 :(得分:1)
将字段作为文本传递到数组中,然后使用反射动态读取属性。
var fieldNames = new string[] {"bankCountryCode", "Currency" };
foreach(var fieldName in fieldNames)
{
IEnumerable<string> fieldId = allItems.Select(m =>
m.GetType().GetProperty(fieldName).GetValue(m, null)).Distinct();
var fieldSL = new List<SelectListItem>();
foreach (var element in fieldId)
{
// adding null check here until cosmos db with null tenant id's for tax are removed.
if (element != null)
{
fieldSL.Add(new SelectListItem
{
Value = element.ToString(),
Text = element.ToString()
});
}
}
fieldSL = fieldSL.OrderBy(x => x.Text).ToList();
ViewBag.fieldIdList = fieldSL;
}
答案 1 :(得分:0)
我承认我没有清楚地理解你的问题。但这是你需要的吗? (我无法测试,我在这里写道。)
IEnumerable<string> fieldId = allItems.Select(m => m.FieldId).Distinct();
var fieldSL = fieldId.Where(f => !string.IsNullOrEmpty(f)).Select(x => new SelectListItem { Text = f, Value = f })).OrderBy(i => i.Text).ToList();
ViewBag.fieldIdList = fieldSL;
无论哪种方式,更好地澄清情况,以便其他人可以帮助您。如果您需要更小的代码或其他逻辑或业务解决方案......