我目前正在设置一个名为IOrderedEnumerable
的{{1}}变量。我想创建一个函数,我可以将properties
传递给它并让它返回OrdersDemo.Models.facility_customer_orders
。我试图让它工作但失败了。
有没有人对如何创建这个功能有任何想法?
IOrderedEnumerable
这就是我想要完成的事情:
这将是我的新电话。我有一个名为var properties = typeof(OrdersDemo.Models.facility_customer_orders).GetProperties()
.Where(p => p.IsDefined(typeof(AdditionalModelAttributes), false))
.Select(p => new
{
globalColumnName = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().GlobalColumnName,
displayHeaderName = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayHeaderName,
displayOrder = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayDisplayOrder,
displayFKTable = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayFKTable,
displayFKLookupIdColumn = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayFKLookupIdColumn,
displayFKLookupDisplayColumn = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayFKLookupDisplayColumn
})
.OrderBy(o => o.displayOrder);
的类和一个名为AdditionalModelAttributeMethods
的方法。
GetAdditionalAttributes
我的方法看起来像这样:
var properties = AdditionalModelAttributeMethods.GetAdditionalAttributes(OrdersDemo.Models.facility_customer_orders);
我无法转换输入和输出类型以接收类并将public IOrderedEnumerable<dynamic> GetAdditionalAttributes(class aModel)
{
return typeof(aModel).GetProperties()
.Where(p => p.IsDefined(typeof(AdditionalModelAttributes), false))
.Select(p => new
{
globalColumnName = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().GlobalColumnName,
displayHeaderName = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayHeaderName,
displayOrder = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayDisplayOrder,
displayFKTable = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayFKTable,
displayFKLookupIdColumn = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayFKLookupIdColumn,
displayFKLookupDisplayColumn = p.GetCustomAttributes(typeof(AdditionalModelAttributes), true).Cast<AdditionalModelAttributes>().FirstOrDefault().DisplayFKLookupDisplayColumn
})
.OrderBy(o => o.displayOrder);
}
返回到我的变量IEnumerableList
。
答案 0 :(得分:1)
您无法返回匿名类型。创建具体类型并将其返回。
答案 1 :(得分:0)
以下是一些选项,按照普遍接受的顺序:
IEnumerable<{type}>
作为函数的返回类型。IEnumerable<dynamic>
。您至少可以引用调用代码中的属性,尽管调用在运行时才会被绑定,IEnumerable<object>
作为返回类型。调用代码必须使用反射来访问属性。 由于您只是查询AdditionalModelAttributes
的多个属性,因此可以执行
var properties = typeof(OrdersDemo.Models.facility_customer_orders).GetProperties()
.Where(p => p.IsDefined(typeof(AdditionalModelAttributes), false))
.Select(p => p.GetCustomAttributes(typeof(AdditionalModelAttributes), true)
.Cast<AdditionalModelAttributes>()
.FirstOrDefault())
.OrderBy(o => o.DisplayDisplayOrder);
并使用IEnumerable<AdditionalModelAttributes>
的返回类型,但是您没有提供足够的信息来确定这是否是正确的方法。
由于您似乎决定不使用具体类型,因此您需要在方法中进行最小更改:
public IEnumerable<dynamic> GetAdditionalAttributes(object aModel)
{
return aModel.GetType().GetProperties()
.Where(p => p.IsDefined(typeof(AdditionalModelAttributes), false))
...