這可能是一個愚蠢的問題,但我一直使用LINQ來選擇項目。是否可以使用LINQ進行列表操作?
但我想知道是否有可能使用其關鍵字完成以下簡單任務。
List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
if(OI.TYPE == "P")
OI.TYPE = "Project";
else
OI.TYPE = "Support";
這可能是一個愚蠢的問題,但我一直使用LINQ來選擇項目。是否可以使用LINQ進行列表操作?
但我想知道是否有可能使用其關鍵字完成以下簡單任務。
List<OrdersInfo> ordersList
.
.
.
foreach(OrdersInfo OI in ordersList)
if(OI.TYPE == "P")
OI.TYPE = "Project";
else
OI.TYPE = "Support";
沒有,LINQ(Language-Integrated Query)是查詢語言,它真正的亮點在consise 查詢定義,但在這並不總是好的太(速度和/或內存問題)。
如果你想修改集合,保持你已經這樣做的方式。
LINQ是用於查詢集合,修改你的電流回路更具可讀性和更好的方法,但如果你想那麼LINQ選項:
如果OrderInfo
是一個類(引用類型),那麼你可以修改的屬性(你的不能賦值爲null或新的引用)。
var ordersList = new List<OrdersInfo>();
ordersList.Add(new OrdersInfo() { TYPE = "P" });
ordersList.Add(new OrdersInfo() { TYPE = "S" });
ordersList.Add(new OrdersInfo() { TYPE = "P" });
ordersList.Select(r => (r.TYPE == "P" ? r.TYPE = "Project" : r.TYPE = "Support")).ToList();
隨着你的類定義爲:
class OrdersInfo
{
public string TYPE { get; set; }
}
下面是截圖
有趣的是,我沒有對結果分配回ordersList
你可以使用ForEach我列表類的方法。
ordersList.ForEach(oi => oi.TYPE = oi.TYPE == "P" ? "Project" : "Support");
如果你想擁有的IEnumerable類型的ForEach方法,你可以創建自己的ForEach擴展
public static void ForEach<T>(this IEnumerable<T> en, Action<T> action)
{
foreach(T item in en)
{
action(item);
}
}
ForEach不是LINQ的解決方案,但它看起來是:
ordersList.ForEach(OI => OI.TYPE = OI.TYPE == "P" ? "Project" : "Support");
可用ony List<T>
實例,而不是IEnumerable<T>
。
對不起,我沒有看到你的答案 – binard 2013-04-24 12:28:04
我們同時發帖,而且我們這裏幫忙,不要競爭:) – 2013-04-24 12:29:16
我不明白重複的OI。TYPE – AngelicCore 2013-04-24 12:32:20
LINQ意味着無突變。如果你想操縱,使用'foreach'。 – Jon 2013-04-24 11:56:46
謝謝大家 – AngelicCore 2013-04-24 12:12:22