【问题标题】:Get values from one list inside one list using lambda expression使用 lambda 表达式从一个列表中的一个列表中获取值
【发布时间】:2013-02-13 12:10:59
【问题描述】:

我是 lambda 表达式的新手,所以我尝试解决一个问题。但我不能。所以任何人都可以为此提出解决方案。

我有一类客户。在里面我创建了另外 3 个类并为 3 个类创建了 observable 集合。我为这个客户创建了一个 observable 集合

ObservableCollection<Customer> customer2;

   public class Customer
    {
        public string CusName { get; set; }
        public int CusAge { get; set; }
        public ObservableCollection<Bankdetails> bankdetails;
        public ObservableCollection<order> orderlist;
        public ObservableCollection<orderdetails> orderdetailslist;

        public class Bankdetails
        {
            public string Bankaccno { get; set; }
            public string bankname { get; set; }
            public int bankid { get; set; }
        }

        public class order
        {
            public string ordername { get; set; }
            public string orderid { get; set; }

        }

        public class orderdetails
        {
            public string orderid { get; set; }
            public string itemname { get; set; }
            public int itemqty { get; set; }

        }

    }

我编写了一个 linq 查询来从 customer2 获取值。无论如何它的工作原理。像这样我尝试编写一个 lambda 查询,但我不能。

我在这里添加一些值到 observable 集合。

  customer2 = new ObservableCollection<Customer>
        {
            new Customer()
        {
            CusName="nixon",CusAge=24,
            bankdetails=new ObservableCollection<Customer.Bankdetails>
            {
                new Customer.Bankdetails()
                {
                    bankid=12,bankname="axis",Bankaccno="09876534"
                }
            },
            orderlist=new ObservableCollection<Customer.order>
            {
                new Customer.order
                {
                    orderid="Od123",ordername="Express"
                }
            },
            orderdetailslist=new ObservableCollection<Customer.orderdetails>
            {
                new Customer.orderdetails
                {
                    orderid="Od123",itemname="cpu",itemqty=5
                }
            }

        }
            };

这是我的 linq 查询

  var customer1 = from cus in customer2
                      from bank in cus.bankdetails
                      from ord in cus.orderlist
                      from orddet in cus.orderdetailslist
                      where ord.orderid == orddet.orderid 

                      select new
                      {
                          cus.CusAge,cus.CusName,
                          bank.Bankaccno,bank.bankid,bank.bankname,
                          ord.ordername,
                          orddet.itemname,orddet.itemqty

                      };

那么 lambda 查询将是什么。请任何人建议。

【问题讨论】:

  • 这里 Nixex09 如果你正在学习 Lambda,那么从这里开始阅读 msdn.microsoft.com/en-us/library/bb397687.aspx
  • 我真的不明白这个问题。你到底想做什么?为什么您编写的查询对您不起作用?你想要什么结果?你实际得到了什么结果?
  • 在学习 LINQ 时,请尝试使用 LINQPad。它的功能之一是能够向您显示查询表达式的 Lambda 版本。

标签: c# linq lambda


【解决方案1】:

使用问题中的where 扩展的马特解决方案是:

var xxx = customer2.SelectMany(cus =>
    cus.bankdetails.SelectMany(bank => 
        cus.orderlist.SelectMany(ord => 
           cus.orderdetailslist.Where(orddet => orddet.orderid == ord.orderid)
              .Select(orddet => new
                {
                    cus.CusAge,
                    cus.CusName,
                    bank.Bankaccno,
                    bank.bankname,
                    orddet.itemname,
                    orddet.itemqty
                }
            )
        )
    )
);

【讨论】:

    【解决方案2】:
    var xxx = customer2.SelectMany(cus =>
        cus.bankdetails.SelectMany(bank => 
            cus.orderlist.SelectMany(ord => 
                cus.orderdetailslist.Select(orddet => new
                    {
                        cus.CusAge,
                        cus.CusName,
                        bank.Bankaccno,
                        bank.bankname,
                        orddet.itemname,
                        orddet.itemqty
                    }
                )
            )
        )
    );
    

    【讨论】:

    • 谢谢...你有我的问题。这只是学习目的而已..无论如何你节省了我很多时间..
    • 我们如何在这个表达式中添加 'where' 条件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多