用linq怎么操作list?

superdesign20 2010-09-16 12:02:53
比如有这样一个list
list<product> aproduct=new list<product>();
for(int i=0;i<9;i++)
{
product thp=new product();
thp.id=i;
thp.name=i+100;
aproduct.add(thp)
}

class product{
int id{get;set;}
int name{get;set;}
int score3{get;set;}
}

再比如有两外一个list,是这样的

list<entityscroe> score=new list<entityscroe>();
for(int i=0;i<9;i++)
{
score thisscrore=new score();
thisscrore.id=i;
thisscrore.score1=i+100;
thisscrore.score2=i+50;
score.add(thisscrore)
}

class entityscroe{
int id{get;set;}
int score1{get;set;}
int score2{get;set;}
}


现在product和score是两个list,里面的属性有ID,我想要的是,如果score的id和product的id相同,那么就把score里的score1和score2的值,相加后赋值给product的score3属性,重而组成一个新的list

用linq怎么做?不用循环,用linq

...全文
817 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
q107770540 2010-09-16
  • 打赏
  • 举报
回复

//这是完整代码:
class product
{
public int id { get; set; } //注意要申明为public
public int name { get; set; }

public int score3 { get; set; }
}

class entityscroe
{
public int id { get; set; }
public int score1 { get; set; }
public int score2 { get; set; }
}

void test()
{
List<product> aproduct = new List<product>();
for (int i = 0; i < 9; i++)
{
product thp = new product();
thp.id = i;
thp.name = i + 100;
aproduct.Add(thp);
}

List<entityscroe> score = new List<entityscroe>();
for (int i = 0; i < 9; i++)
{
entityscroe thisscrore = new entityscroe();
thisscrore.id = i;
thisscrore.score1 = i + 100;
thisscrore.score2 = i + 50;
score.Add(thisscrore);
}
//结果:
List<product> listNew = (from s1 in aproduct
join s2 in score
on s1.id equals s2.id
select new product
{
id = s1.id,
score3 = s2.score1 + s2.score2
}).ToList();

}

q107770540 2010-09-16
  • 打赏
  • 举报
回复
下次建议你直接发到LINQ区

每次哥去LINQ区,都见不到几个新帖

原来都跑到ASP.NET区来了
q107770540 2010-09-16
  • 打赏
  • 举报
回复

//这就是你想要的结果:
List < product > listNew=( from s1 in aproduct
join s2 in score
on s1.id equals s2.id
select new product
{
id=s1.id,
score3=s2.score1+s2.score2
}).ToList();
baysos 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 superdesign20 的回复:]
呵呵,谢谢啊,能告诉我为什么linq效率高一些吗?
[/Quote]
Linq的内部执行原理浅析
  LINQ(Language Integrated Query)是Visual Studio 2008中的领军人物。借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。目前为止LINQ所支持的数据源有SQL Server、XML以及内存中的数据集合。开发人员也可以使用其提供的扩展框架添加更多的数据源,例如MySQL、Amazon甚至是Google Desktop。   一般来讲,这类查询语句的一个重要特点就是可以并行化执行。虽然有些情况下并行可能会带来一些问题,但这种情况非常少见。这样也就水到渠成地引出了PLINQ这个并行处理的LINQ类库。   PLINQ原名为Parallel LINQ,支持XML和内存中的数据集合。执行于远程服务器上的查询语句(例如LINQ to SQL)显然无法实现这个功能。   将LINQ语句转换为PLINQ语句极为简单——只需要在查询语句中From子句所指定的数据源的最后添加.AsParallel()即可。随后Where、OrderBy和Select子句将自动改为调用这个并行的LINQ版本。   据MSDN Magazine介绍,PLINQ可以以三种方式执行。第一种是管道处理:一个线程用来读取数据源,而其他的线程则用来处理查询语句,二者同步进行——虽然这个单一的消费线程可能并不那么容易与多个生产线程同步。不过若是能够仔细配置好负载平衡的话,仍然会极大地减少内存占用。   第二种模式叫做“stop and go”,用于处理结果集需要被一次返回时(例如调用ToList、ToArray或对结果排序)的情况。在这种模式下,将依次完成各个处理过程,并将结果统一返回给消费线程。这个模式在性能上将优于第一种模式,因为它省去了用来保持线程同步所花费的开销。   最后一种方法叫做“inverted enumeration”。该方法并不需要实现收集到所有的输出,然后在单一的线程中处理,而是将最终调用的函数通过ForAll扩展传递到每个线程中。这是目前为止最快的一种处理模式,不过这需要传递到ForAll中的函数是线程安全的,且最好不包含任何lock之类的互斥语句。   若是PLINQ中任意的一个线程抛出异常,那么所有的其他线程将会被终止。若是抛出了多个异常,那么这些异常将被组合成一个MultipleFailuresException类型的异常,但每个异常的调用堆栈仍会被保留。


----------------取自百度
superdesign20 2010-09-16
  • 打赏
  • 举报
回复
呵呵,谢谢啊,能告诉我为什么linq效率高一些吗?
q107770540 2010-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 superdesign20 的回复:]

谢谢楼上各位啊,请问这种linq写法和我直接写循环,赋值,哪种效率高些,效率区别有多大呢?
[/Quote]
“楼上各位” 回答你: linq效率高些
superdesign20 2010-09-16
  • 打赏
  • 举报
回复
谢谢楼上各位啊,请问这种linq写法和我直接写循环,赋值,哪种效率高些,效率区别有多大呢?
LINQ to SQL语句(1)之Where 2 Where操作 2 1.简单形式: 2 2.关系条件形式: 2 3.First()形式: 3 LINQ to SQL语句(2)之Select/Distinct 3 1.简单用法: 4 2.匿名类型 形式: 4 3.条件形式: 5 4.指定类 型形式: 6 5.筛选形式: 6 6.shaped形式(整形类型): 6 7.嵌套类型形式: 7 8.本地方法调用 形式(LocalMethodCall): 7 9.Distinct形式: 8 LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg 9 1.简单形式: 9 2.带条件形 式: 9 1.简单形式: 10 2.映射形式: 10 3.元素 : 11 1.简单形式: 11 2.映射形式: 11 3.元素: 11 1.简单形式: 12 2.映射形式: 12 3.元素: 12 LINQ to SQL语句(4)之Join 13 Join操作符 13 1.一对多关系(1 to Many): 13 2.多对多关系(Many to Many): 14 3.自联接关系: 15 1.双向联接(Two way join): 15 2.三向联接(There way join): 16 3.左外部联接(Left Outer Join): 17 4.投影的Let赋值(Projected let assignment): 17 5.组合键(Composite Key): 18 6.可为null/不可为null的键关系 (Nullable/Nonnullable Key Relationship): 19 LINQ to SQL语句(5)之Order By 19 Order By操作 19 1.简单形式 19 2.带条件形式 20 3.降序排序 20 4.ThenBy 20 5.ThenByDescending 22 6. 带GroupBy形式 22 LINQ to SQL语句(6)之Group By/Having 23 Group By/Having操作符 23 1.简单形式: 23 2.Select匿名类 : 24 3.最大 值 25 4.最小 值 26 5.平均 值 26 6.求和 26 7.计数 27 8.带条件计数 27 9.Where限制 28 10.多列(Multiple Columns) 28 11.表达式(Expression) 29 LINQ to SQL语句(7)之Exists/In/Any/All/Contains 29 Exists/In/Any/All/Contains操作符 29 Any 29 1.简单形式: 29 2.带条件形式: 30 All 30 Contains 31 1.包含一个对象: 31 2.包含多个值: 32 LINQ to SQL语句(8)之Concat/Union/Intersect/Except 32 Concat/Union/Intersect/Except操作 32 Concat(连接) 32 1.简单形式: 33 2.复 合形式: 33 Union(合并) 33 Intersect(相交) 34 Except(与非) 34 LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods 35 Top/Bottom操作 35 Take 35 Skip 35 TakeWhile 36 SkipWhile 36 Paging(分页)操作 36 1.索引 36 2.按唯一键排序 36 SqlMethods操作 37 Like 37 已编译查 询操作(Compiled Query) 38 LINQ to SQL语句(10)之Insert 38 插入(Insert)1.简单形式 38 2.一对多 关系 39 3.多对多关系 39 4.使用动态CUD重写(Override using Dynamic CUD) 40 LINQ to SQL语句(11)之Update 41 更新(Update) 41 1.简单形式 41 2.多项更改 41 LINQ to SQL语句(12)之Delete和使用Attach 42 删除(Delete)1.简单形式 42 2.一对多关系 42 3.推理删除(Inferred Delete) 43 使用Attach更新(Update with Attach) 43 LINQ to SQL语句(13)之开放式并发控制和事务 46 Simultaneous Changes开放式并发控制 46 开放式并发(Optimistic Concurrency) 46 1.Implicit(隐式) 48 2.Explicit(显式) 48 LINQ to SQL语句(14)之Null语义和DateTime 49 Null语义 49 1.Null 49 2.Nullable.HasValue 50 日期函数 50 1.DateTime.Year 51 2.DateTime.Month 51 3.DateTime.Day 51 LINQ to SQL语句(15)之String 51 字符串(String) 51 1.字符 串串联(String Concatenation) 52 2.String.Length 52 3.String.Contains(substring) 52 4.String.IndexOf(substring) 52 5.String.StartsWith (prefix) 53 6.String.EndsWith(suffix) 53 7.String.Substring(start) 53 8.String.Substring (start, length) 53 9.String.ToUpper() 54 10.String.ToLower() 54 11.String.Trim() 54 12.String.Insert(pos, str) 54 13.String.Remove(start) 55 14.String.Remove(start, length) 55 15.String.Replace(find, replace) 55 LINQ to SQL语句(16)之对象标识 56 对象标识 56 对象缓存 56 LINQ to SQL语句(17)之对象加载 57 对象加载延迟加载 57 预先加载:LoadWith 方法 58 LINQ to SQL语句(18)之运算符转换 59 1.AsEnumerable:将类型转换为泛型 IEnumerable 59 2.ToArray:将序列转换为数组 59 3.ToList:将序列转换为 泛型列表 59 4.ToDictionary:将序 列转化为字典 60 LINQ to SQL语句(19)之ADO.NET与LINQ to SQL 60 1.连接 61 2.事务 61 LINQ to SQL语句(20)之存储过程 63 1.标量返回 63 2.单一结 果集 64 3.多个可 能形状的单一结果集 65 4.多个结果集 70 5.带输出参数 79 LINQ to SQL语句(21)之用户定义函数 80 1.在Select中使用用户定义的标量函数 80 2.在Where从句中 使用用户定义的标量函数 81 3.使用用户定义的表值函数 83 4.以联接方式使用用户定义的表值函数 84 LINQ to SQL语句(22)之DataContext 85 创建和删除数据库 85 数据库验证 88 数据库更改 88 动态查询 89 日志 90 LINQ to SQL语句(23)之动态查询 90 1.Select 91 2.Where 92 LINQ to SQL语句(24)之视图 94 LINQ to SQL语句(25)之继承 96 1.一般形式 97 2.OfType形式 98 3.IS形式 98 4.AS形式 99 5.Cast形式 99 6.UseAsDefault形式 100 7.插入新的记录 101

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧