我有一个控制器,它有几个动作,其中一些可能有一个自定义属性。我想使用linq为控制器上的每个动作选择一些匿名类型的数据。SelectMany类型参数不能从使用推断
Controller1
Action1
[MyAttribute("Con1Action2)"]
Action2
[MyAttribute("Con1Action3")]
Action3
Controller2
Action1
[MyAttribute("Con2Action2)"]
Action2
[MyAttribute("Con2Action3")]
Action3
我想下面返回:
var controllers= myControllerList
.Where(type =>type.Namespace.StartsWith("X.") &&
type.GetMethods().Any(m => m.GetCustomAttributes(typeof(MyAttribute)).Any()))
.SelectMany(type =>
{
var actionNames = type.GetMethods().Where(m => m.GetCustomAttributes(typeof(MyAttribute)).Any()).ToList();
var actionName = (MyAttribute)actionNames[0].GetCustomAttribute(typeof(MyAttribute));
return new
{
Namespace = GetPath(type.Namespace),
ActionName= actionName.Name,
Controller = type.Name.Remove(2);
};
}).ToList();
我在SelectMany-类型得到一个错误:
NameSpace = "someText", Controller = "Controller1", ActionName = "Con1Action2",
NameSpace = "someText", Controller = "Controller1", ActionName = "Con1Action3",
NameSpace = "someText", Controller = "Controller2", ActionName = "Con2Action2",
NameSpace = "someText", Controller = "Controller2", ActionName = "Con2Action3"
我为每个动作挣扎的SelectMany该方法的参数...不能从使用中推断出来。
您是否尝试过使用Select而不是SelectMany?每种类型是不是一个集合呢? –
myControllerList是一个集合,对于每个控制器,可能有多个具有custome属性的方法,所以如果这有意义的话,我需要一个控制器中每个方法的项目。 @ChrisWohlert –
我想这是有道理的,但在你的示例代码中,你并没有试图返回所有的属性,只有第一个。如果瑞的回答不是你想要的,我很惊讶。如果是这样,你应该接受它作为答案。 :) –