myList'不能在此范围内声明
本文关键字:范围内 声明 不能 myList | 更新日期: 2023-09-27 18:13:09
谁能解释给我知道这个错误是什么,为什么我得到它?我试图改变名称f
变量,但它没有工作。
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()));
}
}
这是因为c#支持闭包。编译器会报错,因为lambda参数myList
必须与外部作用域中的任何变量具有不同的名称。
试试这个:
myList = myList.Where(x => x.ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));
参见Lambda表达式(c#编程指南)
下一个问题是myList
是ProductionOrderList
类型,而Where
返回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())));
}
将代码改为
myList = myList.Where( item => item .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));