2013-05-12 62 views
0

任何人都可以向我解释知道这个错误是什么,为什么我得到它? 我试图改变名称f的变量,但它没有奏效。局部变量名为'myList'不能在此范围内声明

public ActionResult Index(string SortOrder, string CurrentFilter, string SearchString, int? page) 
{ 

    ViewBag.CurrentSort = SortOrder; 
    ViewBag.NameSortParm = string.IsNullOrEmpty(SortOrder) ? "Tillverkning desc" : ""; 
    ViewBag.DateSortParm = SortOrder == "HireDate" ? "HireDatedesc" : "HireDate"; 

    conn.Open(); 

    ProductionOrderList myList = new ProductionOrderList(); 
    myList = ProductionOrderReg.GetProductionOrders(conn, new Guid("288937bcc-6uif-485a-anm9-fadfq1234039d")); 

    if (!string.IsNullOrEmpty(SearchString)) 
    {  
     // here on myList get red line  
     myList = myList.Where(myList => myList .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper())); 
    } 
} 

回答

4

这是因为C#支持closures。编译器抱怨,因为lambda参数myList必须具有与外部作用域中的任何变量不同的名称。

试试这个:

myList = myList.Where(x => x.ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper())); 

Lambda Expressions (C# Programming Guide)


你的下一个问题是,myListProductionOrderList类型,而Where retuns的IEnumerable<T>。除非你需要来使用自定义集合类型,否则我不会使用它。试试这个:

IEnumerable<tionOrderItem> myList = ProductionOrderReg.GetProductionOrders(...); 
if (!string.IsNullOrEmpty(SearchString)) 
{  
     // here on myList get red line  
     myList = myList.Where(x => x .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper())); 
} 

... 

或者,你真的必须使用ProductionOrderList一个实例,请确保您有一个构造函数的IEnumerable<T>,并使用此:

ProductionOrderList myList = ProductionOrderReg.GetProductionOrders(...); 
if (!string.IsNullOrEmpty(SearchString)) 
{  
     // here on myList get red line  
     myList = new ProductionOrderList(
      myList.Where(x => x .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()))); 
} 
+0

错误不能隐式转换类型'System.Collections.Generic.IEn umerable '到'SystemCompany.Database.Production.ProductionOrderList'。存在明确的转换(您是否缺少演员?) 我的productionOrderItem是ProductionOrderList中的项目 – 2013-05-12 18:03:04

+0

@FadiAlkadi我已经添加了有关该错误的更多信息。看到我更新的错误。 – 2013-05-12 18:13:42

1

更改您的代码

myList = myList.Where(item => item .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper())); 
+0

错误不能将类型'System.Collections.Generic.IEnumerable '隐式转换为'SystemCompany.Database.Production.ProductionOrderList'。存在明确的转换(您是否缺少演员?) 我的productionOrderItem是ProductionOrderList中的项目 – 2013-05-12 18:02:01

相关问题