Linq 从动态请求获取到列表
我的代码运行得很好,但我想知道您是否可以建议一些更具性能的方法来获取我的动态控件的值Linq 从动态请求获取到列表,linq,c#-4.0,Linq,C# 4.0,我的代码运行得很好,但我想知道您是否可以建议一些更具性能的方法来获取我的动态控件的值 public class Obj { public int ID { get; set; } public int Quantity { get; set; } public List<int> getValues (List<Obj> myList) { List<Obj> listQuatity = new List<
public class Obj
{
public int ID { get; set; }
public int Quantity { get; set; }
public List<int> getValues (List<Obj> myList)
{
List<Obj> listQuatity = new List<Obj>();
foreach (Obj item in myList)
{
listQuatity.Add(new Obj
{
ID = item.ID,
Quantity = Request.Params["codControl" + item.ID].Trim().Equals("")
? 0
: Convert.ToInt32(Request.Params["codControl" + item.ID])
});
}
}
}
公共类Obj
{
公共int ID{get;set;}
公共整数数量{get;set;}
公共列表getValues(列表myList)
{
List LISTQUITY=新列表();
foreach(myList中的Obj项)
{
列表数量.添加(新对象)
{
ID=item.ID,
数量=Request.Params[“codControl”+item.ID].Trim().Equals(“”)
? 0
:Convert.ToInt32(Request.Params[“codControl”+item.ID])
});
}
}
}
没有太多的优化空间,您的循环非常简单直接。
我要改进的一件事是缓存Request.Param
值,而不是访问它两次:
(这可以使用LINQ重写,因此看起来更优雅,但不会更快)
public List getValues(List myList)
{
List LISTQUITY=新列表();
foreach(myList中的Obj项)
{
//访问它一次,这样代码会稍微快一点
//但是非常清楚
var requestParam=Request.Params[“codControl”+item.ID].Trim();
列表数量.添加(新对象)
{
ID=item.ID,
数量=requestParam.Equals(String.Empty)
? 0
:Convert.ToInt32(requestParam)
});
}
}
让我们看看LINQ查询的外观:
List<Obj> listQuatity =
myList.Select(i => new {
Id = i.ID,
Param = Request.Params["codControl" + item.ID].Trim(),
})
.Select(i => new Obj {
ID = i.Id,
Quantity = Param.Equals(String.Empty)
? 0
: Convert.ToInt32(i.Param)
})
.ToList();
列表数量=
myList.Select(i=>new{
Id=i.Id,
Param=Request.Params[“codControl”+item.ID].Trim(),
})
.选择(i=>newobj{
ID=i.ID,
数量=参数等于(字符串为空)
? 0
:Convert.ToInt32(i.Param)
})
.ToList();
为什么这个标签是linq?@cadrell0可能是一个解决方案?因为LINQ是处理列表的最好方法。LINQ到对象的效率并不比循环高。事实上,在大多数情况下,它最终将执行相同的foreach。它只是看起来更漂亮,更容易维护。听起来你在问这个问题之前已经有了答案。尽量不要对不同方向的答案存有偏见。可以传递多少项?您之所以考虑性能,是因为这是一个好的做法还是一些真正最糟糕的情况?@sll good practices。。我正在尽我最大的努力来提高我对列表主题的认识,因为我最近经常使用它。
List<Obj> listQuatity =
myList.Select(i => new {
Id = i.ID,
Param = Request.Params["codControl" + item.ID].Trim(),
})
.Select(i => new Obj {
ID = i.Id,
Quantity = Param.Equals(String.Empty)
? 0
: Convert.ToInt32(i.Param)
})
.ToList();