用一句Linq把一个集合的属性值根据条件改了,其他值不变

第一次发博。 - -

刚无聊看到群里一位朋友在提问,大晚上没人解答,遂自己默默打开了VS,敲起了代码。

问题:请问怎么将集合newFoods中Name含有"包子"的Number+1,LINQ可以一句话写出来 ?

List<Food> newFoods = new List<Food>{
    new Food { Money = 10, Name = "天津包子", Number=1 },
    new Food { Money = 10, Name = "狗不理包子", Number = 1 },
    new Food { Money = 10, Name = "小笼包子", Number = 1 },
    new Food { Money = 10, Name = "馒头", Number = 1 },
    new Food { Money = 10, Name = "粽子", Number = 1 }
};

我先是敲了一下正常的写法,很快出来了。

但是用Linq一直不知道该怎么写,反而越写越麻烦,还想出准备先筛选出一个对象,再把两个对象合并的傻办法。

后来发现原来select里是可以直接查询完返回原对象的。之前用Linq一直以为只能是 model.Select(o=>o.property==xxx) 这样用,也没去深究,看来是修为不够。

最后的代码:

 1         #region
 2         public class Food
 3         {
 4             public string Name { get; set; }
 5             public int Money { get; set; }
 6             public int Number { get; set; }
 7         }
 8         static void Example1()
 9         {
10             List<Food> newFoods = new List<Food>{
11                new Food { Money = 10, Name = "天津包子", Number=1 },
12                new Food { Money = 10, Name = "狗不理包子", Number = 1 },
13                new Food { Money = 10, Name = "小笼包子", Number = 1 },
14                new Food { Money = 10, Name = "馒头", Number = 1 },
15                new Food { Money = 10, Name = "粽子", Number = 1 }
16             };
17             //Linq写法
18             newFoods = newFoods.Select(o =>
19             {
20                 o.Number = o.Name.Contains("包子") ? o.Number + 1 : o.Number;
21                 return o;
22             }).ToList();
23             //普通写法
24             for (int i = 0; i < newFoods.Count; i++)
25             {
26                 newFoods[i].Number = newFoods[i].Name.Contains("包子") ? newFoods[i].Number + 1 : newFoods[i].Number;
27             }
28             //遍历输出
29             foreach (Food food in newFoods)
30             {
31                 Console.WriteLine("名称:" + food.Name + ",价格:" + food.Money + ",数量:" + food.Number);
32             }
33             Console.ReadLine();
34         }
35         #endregion
时间: 2024-10-14 08:51:27

用一句Linq把一个集合的属性值根据条件改了,其他值不变的相关文章

用Linq从一个集合选取几列得到一个新的集合-可改列名

来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=205GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com 原文地址:https://www.cnblogs.com/cnsend/p/12077610.html

DataTable的筛选,过滤后绑定数据源的两种方法(DataTable的select和使用linq返回List集合)

一般数据处理使用DataTable的情况会很多,而我们很多时候会对得到的DataTable的数据进行筛选后绑定到Combobox.GridView.Repeat等控件中,现在分享一下两种DataTable在C#程序中的筛选处理方式. 我们先手动创建一个DataTable  DataTable dt=new DataTable(); DataColumn dtc = new DataColumn("id",typeof(string));            dt.Columns.Ad

如何使用linq读取DataTable集合?AsQueryable() 和 AsEnumerable()区别?

一.准备工作 引入linq和data 相关的using命名空间 DataTable dt=new DataTable();//dt的来源可以是多个地方,比如:数据库,Excel等等.我这里使用Excel. 二.获取DataTable的列名及数据类型的方法 有了这个方法就不必考虑来源中的列名和数据类型,这里就可以查找到. foreach (DataColumn dc in dt.Columns)//获取DataTable中的列名,这里的dt由于是从Excel导入所有列名为:F1,F2,F3,F4.

LINQ系列:Linq to Object集合操作符

集合操作符对元素的集合或序列集合进行操作,并返回一个集合.LINQ共有4种集合查询操作符:Distinct.Union.Intersect和Except. 1. Distinct Distinct操作符删除集合中重复的值,并返回该集合中互不相同的元素. 1>. 原型定义 public static IQueryable<TSource> Distinct<TSource>(this IQueryable<TSource> source); public stati

linq查询一个字段的总和

(from s in dc.StockInItem   //所要查询单表 join si in dc.StockIn           //联合的表 on s.StockInID equals si.StockInID     //两个表联合的相同条件 where (s.ColorsID == int.Parse(colorID) && s.SizesID == int.Parse(sizeID) && s.ProductID == int.Parse(ProtectID

用一个集合这么难?

集合   有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是(用二叉树排序) Map AbstractMap 否 使用key-value来映射和存储数据,Key必须惟一,value可以重复 HashMap TreeMap 是(用二叉树排序) 目的: 用数组存储数据时只能具有简单的组织形式,而且大小有时候也不确定的需求也无法满足,因此需要具有更多操作的集合来进行数据存储 分类: Vector(矢量) B

JavaScript一个集合的运算类

输出都在控制台中: <script type="text/javascript"> function Set() { //这是一个构造函数 this.values = {}; //集合数据保存在对象的属性里 this.n = 0; //集合中值的个数 this.add.apply( this, arguments ); //把所有参数都添加到这个集合中 } //将每个参数都填加到集合中 Set.prototype.add = function(){ console.log(

枚举一个集合的所有子集

一个神奇的算法,在题目中看到的,单独拿出来整理枚举一个集合S(用一个二进制表示)的所有子集S0: for(int S0 = S; S0; S0 = (S0-1)&S){}

有一个集合,判断集合里有没有“world”这个元素,如果有,添加“javaee”

// 有一个集合,判断集合里有没有"world"这个元素,如果有,添加"javaee" List list = new ArrayList(); list.add("world"); list.add("java"); list.add("hello"); //ConcurrentModificationException /*Iterator it = list.iterator(); while(it.