任何人都可以向我解释一下这个错误是什么以及我为什么会这样做?
我试图更改名称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()));
}
}
答案 0 :(得分:4)
这是因为C#支持closures。编译器抱怨,因为lambda参数myList
必须具有与外部作用域中的任何变量不同的名称。
试试这个:
myList = myList.Where(x => x.ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));
请参阅Lambda Expressions (C# Programming Guide)
您遇到的下一个问题是,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())));
}
答案 1 :(得分:1)
将您的代码更改为
myList = myList.Where( item => item .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));