读书人

C# Linq操作List的求教!~该

发布时间: 2012-03-26 15:46:56 作者: rapoo

C# Linq操作List的,求教!~
初学Linq,对linq操作List不太熟悉,现有以下三点困惑,望各位多多指教:
假设有一个用户类,包括了存款,存款名,存款金和一个DataTable,简单的代码如下:
static void Main(string[] args)
{
List<user> list = new List<user>();
list.Add(new user() { struserNo = "A1", struserName = "三", deposit = 10000,dtUser = null});
list.Add(new user() { struserNo = "A1", struserName = "三", deposit = 20000,dtUser = null});

list.Add(new user() { struserNo = "A2", struserName = "李四", deposit = 30000,dtUser = null});
list.Add(new user() { struserNo = "A2", struserName = "李四", deposit = 40000,dtUser = null});

list.Add(new user() { struserNo = "A3", struserName = "王五", deposit = 44000,dtUser = null});
}
class user
{
public string struserNo { get; set; }//存款
public string struserName { get; set; }//存款名
public int deposit{ get; set; }//存款金
public DataTable dtUser { get; set; }//一user的DataTable
}
代码里list.add()了几个用户,如果现在我想做以下三个操作该怎么去写代码呢?
1:取出所有存款(struserNo)为“A1”的存款金(deposit)之和
2:取出存款金(deposit)为“40000”并且存款(struserNo)为“A2”的存款名(struserName)
3: 如何在每一次执行list。add()事件之后都为user类里的dtUser(DataTable类型)加上一行struserNo = "存款", struserName = "存款名", deposit = “存款金”?(即是dtUser = null要如何作修改才能达到第三点要求?)

[解决办法]

C# code
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace AAA{    class Program    {        static void Main(string[] args)        {            List<user> list = new List<user>();            list.Add(new user() { struserNo = "A1", struserName = "三", deposit = 10000, dtUser = null });            list.Add(new user() { struserNo = "A1", struserName = "三", deposit = 20000, dtUser = null });            list.Add(new user() { struserNo = "A1", struserName = "三1", deposit = 20000, dtUser = null });            list.Add(new user() { struserNo = "A1", struserName = "三2", deposit = 20000, dtUser = null });            list.Add(new user() { struserNo = "A1", struserName = "三3", deposit = 20000, dtUser = null });            list.Add(new user() { struserNo = "A2", struserName = "李四", deposit = 30000, dtUser = null });            list.Add(new user() { struserNo = "A2", struserName = "李四", deposit = 40000, dtUser = null });            list.Add(new user() { struserNo = "A2", struserName = "李四1", deposit = 40000, dtUser = null });            list.Add(new user() { struserNo = "A2", struserName = "李四2", deposit = 40000, dtUser = null });            list.Add(new user() { struserNo = "A2", struserName = "李四3", deposit = 40000, dtUser = null });            list.Add(new user() { struserNo = "A3", struserName = "王五", deposit = 44000, dtUser = null });                       user u = null;            double total = 0;            String struserName = "";            for (int i = 0; i < list.Count(); i++)            {                u = list[i];                //1:取出所有存款(struserNo)为“A1”的存款金(deposit)之和                if (u.struserNo.Equals("A1"))                {                    total += u.deposit;                }                //2:取出存款金(deposit)为“40000”并且存款(struserNo)为“A2”的存款名(struserName)                if (u.struserNo.Equals("A2") && (u.deposit == 40000))                 {                    if (struserName.Equals(""))                    {                        struserName = u.struserName;                    }                    else {                        struserName += " , " +  u.struserName;                    }                }                //3,我也不会            }                       Console.WriteLine(total);            Console.WriteLine(struserName);            Console.ReadLine();        }        class user        {            public string struserNo { get; set; }//存款            public string struserName { get; set; }//存款名            public int deposit { get; set; }//存款金            public DataTable dtUser { get; set; }//一user的DataTable        }    }} 


[解决办法]

1.var q = list.Where(o => o.struserNo == "A1").Sum(p => p.deposit);

2.var q = list.Where(o => o.deposit == 40000 && o.struserNo == "A2").First().struserName;

3.第三个没看懂。。。
[解决办法]

探讨

1,2两个都是像我想像中的那样。谢谢!请问一下为什么第一句可以直接用Console.WriteLine(q);就能输出了结果:30000,而第二句则需要用
foreach (var sss in q)
{
Console.WriteLine(sss);
}
……

读书人网 >C#

热点推荐