【问题标题】:Best way to join 3 lists and count how many times an ID is in the list using linq加入 3 个列表并使用 linq 计算 ID 在列表中出现次数的最佳方法
【发布时间】:2018-08-10 01:46:06
【问题描述】:

在这个问题上寻求一些帮助,我正在努力学习 linq 的工作原理。 我的想法是在 personID 上加入人员和客户列表以获取客户的名称,然后在 customerID 上加入客户和销售列表,然后在销售中计算 customerID 以获取来自在线的客户的销售量店铺。

任务:确定哪些人从我们的在线商店下的订单最多

public class Person
{
    public int PersonID { get; set; }
    public string PersonType { get; set; }
    public bool NameStyle { get; set; }
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string Suffix { get; set; }
}

public class Sale
{
    public int SalesOrderId { get; set; }
    public int RevisionNumber { get; set; }
    public DateTime OrderDate { get; set; }
    public DateTime DueDate { get; set; }
    public DateTime? ShipDate { get; set; }
    public bool IsOnlineOrder { get; set; }
    public int CustomerId { get; set; }
    public int? SalesPersonId { get; set; } 
    public int? TerritoryID { get; set; }
    public decimal SubTotal { get; set; }
    public decimal TaxAmt { get; set; }
    public decimal Freight { get; set; }
    public decimal TotalDue { get; set; }
}

public class Customer
{
    //CustomerID can belong to a store or a person
    public int CustomerID { get; set; }
    public int? StoreID { get; set; }
    public int? PersonID { get; set; }
    public int? TerritoryID { get; set; }
    public string AccountNumber { get; set; }
}

    public void MostOrders()
    {
        List<Person> per = Data.GetAllPersons();
        List<Sale> sale = Data.GetAllSales();
        List<Customer> cus = Data.GetAllCustomers();

        var join = (from x in per
                    join y in cus
                    on x.PersonID equals y.PersonID
                    join t in sale
                    on y.CustomerID equals t.CustomerId
                    select new
                    {
                        ......
                    });
    }

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    我将创建一个类来收集所有“商店实体”及其销售额,我认为使用此类的集合(在我的示例中为StoreEntity)执行各种数据操作会容易得多(对于这项任务和未来的任务)。
    这是我的建议:

    public class StoreEntity
    {
        Person PersonEntity { get; set; }
        Customer CustomerEntity { get; set; }
        List<Sale> SalesList { get; set; }
    
        public StoreEntity(Person p, Customer c,List<Sale> sales)
        {
            this.PersonEntity = p;
            this.CustomerEntity = c;
            this.SalesList = sales;
        }
    
        public int SalesCount
        {
            get
            {
                if (SalesList == null)
                {
                    return 0;
                }
                else
                {
                    return SalesList.Count;
                }
            }
        }
    }
    
    public List<StoreEntity> Entities { get; set; }
    public void MostOrders()
    {
        List<Person> per = Data.GetAllPersons();
        List<Sale> sale = Data.GetAllSales();
        List<Customer> cus = Data.GetAllCustomers();
    
        Entities = new List<StoreEntity>();
        foreach (Person p in per)
        {
            var cust = cus.Where(x => x.PersonID == p.PersonID).Select(x => x).SingleOrDefault();
            if (cust != null)
            {
                var sales = sale.Where(x => x.CustomerId == cust.CustomerID).ToList();
                StoreEntity entity = new StoreEntity(p, cust, sales);
                Entities.Add(entity);
            } 
        }
    
        // now you have list of all entities with their sales
        // it will be musch easy to manipulate with linq
        // you can do this:
        Entities = Entities.OrderBy(x => x.SalesCount).ToList();
        // or this...
        var bestEntity = Entities.Max(x => x.SalesCount);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多