Linq连接两个列表中的值

本文关键字:列表 两个 连接 Linq | 更新日期: 2023-09-27 17:58:07

我需要从单独的列表中提取两个值。我有一个Order对象列表和一个Visitors对象列表,每个对象都包含一个按日期排列的完整对象列表。

我需要从VisitorsList访问Visitors属性,从OrdersList访问TotalOrders属性。然后我需要用Visitors来划分每个TotalOrders,以获得第三个值(conversionrate)。最后,我想将每个conversionRate值添加到ListTotalConversions中。

我正在尝试编写一个Linq查询,从各自的Visitors和TotalOrders中获取它们,但我不知道如何做到这一点。

 List<GAVisitorsModel> VisitorsList = GetGAStatisticsReport(model);
        List<GC_OrdersModel> OrdersList = GetOrderReport(model);
        List<GC_ConversionRateModel> TotalConversions = new List<GC_ConversionRateModel>();
        foreach (var order in OrdersList)
        {
            string _date = order.Date;
            var Conversions = VisitorsList.Join(OrdersList, x => x.Visitors, y => y.TotalOrders, (x, y) => new { X = x, Y = y });

            foreach (var c in Conversions)
            {
                //-- Y / X = C
                //int _conversion = C;
                //-- GC_ConversionRateModel GC_Orders = new GC_ConversionRateModel(_date, _conversion)
            }
        }    
        return TotalConversions;

List TotalConversions应按日期返回转换列表。

这些是对象类:

GAVisitors模型:

public class GAVisitorsModel : IGAVisitorsModel
    {
        public string Date { get; set; }
        public int Visitors { get; set; }
        public GAVisitorsModel(string _date, string _visitors)
        {
            Date = _date;
            Visitors = _visitors;
        }
    }

GCOrders模型:

 public class GC_OrdersModel
    {
        public string Date { get; set; }
        public int TotalOrders { get; set; }
        public int TotalProducts {get; set;}

        public GC_OrdersModel(string _date, int _totalOrders, int _totalProducts)
        {
            Date = _date;
            TotalOrders = _totalOrders;
            TotalProducts = _totalProducts;
        }
    }

GC_ConversionRateModel:

public class GC_ConversionRateModel
{
    public string Date { get; set; }
    public int ConversionRate { get; set; }

    public GC_ConversionRateModel(string _date, int _conversionRate)
    {
        Date = _date;
        ConversionRate = _conversionRate;
    }
}

Linq连接两个列表中的值

查看以下内容是否适用于

public List<GC_ConversionRateModel> GetConversionRate()
    {
        List<GAVisitorsModel> VisitorsList = GetGAStatisticsReport(model);
        List<GC_OrdersModel> OrdersList = GetOrderReport(model);
        List<GC_ConversionRateModel> TotalConversions = new List<GC_ConversionRateModel>();
        OrdersList.ForEach(o => {
            TotalConversions.Add((from v in VisitorsList
                                 where v.Date == o.Date
                                 select new GC_ConversionRateModel(o.Date, o.TotalOrders / v.Visitors)).FirstOrDefault());
        });
        return TotalConversions;
    }

此外,在GAVisitorsModel中,当您尝试将字符串分配给ctorVisitors = _visitors;中的整数时,似乎出现了错误。

我建议使用:

var result = from visitor in VisitorsList
             join order in OrdersList on visitor.Date equals order.Date into orders
             select new {
                 Visitor = visitor,
                 VisitorOrders = orders
             };

假设您有"连接"访问者和订单的某个属性(Date值),您将拥有具有相应订单的访问者列表。