我有一個控制器,它有幾個動作,其中一些可能有一個自定義屬性。我想使用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 –
我想這是有道理的,但在你的示例代碼中,你並沒有試圖返回所有的屬性,只有第一個。如果瑞的回答不是你想要的,我很驚訝。如果是這樣,你應該接受它作爲答案。 :) –