【问题标题】:Add data to a list insde a list where item in the prerent list将数据添加到列表内的列表中,其中项目在当前列表中
【发布时间】:2015-04-21 03:56:26
【问题描述】:

我想选择一个 where 语句,将项目添加到只有产品代码匹配的列表中。我有它,所以它可以获取销售中出售的所有产品,但我希望有声明只购买此次销售中的产品。

PS:这真的很难解释

型号

public class userSales
{
    public string Name { get; set; }
    public string UserName { get; set; }
    public int Sale_Id { get; set; }
    public int CostumerID { get; set; }
    public string Sale_Date { get; set; }
    public string Paid { get; set; }
    public Nullable<int> Sale_Cost { get; set; }
    public string Discount_Code { get; set; }
    public List<SaleProduct> saleProductsList { get; set; }        
}

public class SaleProduct
{
    public int SaleID { get; set; }
    public string ProductCode { get; set; }
    public int ProductCount { get; set; }
    public string Image_Path { get; set; }
    public string Shoot_Date { get; set; }
    public string Shoot_Info { get; set; }
}

我遇到问题的 Linq 语句:

var test = (from _ClientData in db.ClientDatas
                        join _salesInfo in db.Sales_Infoes
                        on _ClientData.CostumerID
                        equals _salesInfo.CostumerID
                        where _ClientData.UserName == _userName
                        select new userSales()
                        {
                            CostumerID = _ClientData.CostumerID,
                            Name = _ClientData.Name,
                            UserName = _ClientData.UserName,
                            Sale_Id = _salesInfo.Sale_Id, // This is the item i would like to use in my were statement
                            Sale_Date = _salesInfo.Sale_Date,
                            Sale_Cost = _salesInfo.Sale_Cost,
                            Discount_Code = _salesInfo.Discount_Code,
                            Paid = _salesInfo.Paid,

                            // Problem here
                            saleProductsList = db.SaleProducts.Where()
                        }).ToList();

根据答案得出这个结论:

var reult = db.ClientDatas.Where(a => a.UserName == _userName)
              .Join(db.Sales_Infoes,
                    a => a.CostumerID,
                    b => b.CostumerID,
                    (a, b) => new userSales()
                    {
                        CostumerID = a.CostumerID,
                        Discount_Code = b.Discount_Code,
                        Sale_Cost = b.Sale_Cost,
                        Sale_Id= b.Sale_Id,
                        Name = a.Name,
                        Sale_Date = b.Sale_Date,
                        UserName = a.UserName,
                        Paid = b.Paid,
                        saleProductsList = db.SaleProducts.Where(c => c.SaleID == b.Sale_Id).ToList()
                    }).ToList();

【问题讨论】:

  • 很难理解你在问什么。您是否难以理解 .Where() 函数?你试过 db.SaleProducts.Where(c=>c.productId==SomeProductId)

标签: c# linq


【解决方案1】:

您不是在寻找位置,而是在寻找加入。在单个表上过滤结果的地方,连接与两个表相交,这实际上是您想要的。

var result = db.Sales_Infoes.Where(x => x.UserName == _userName)
        .Join(db.ClientDatas,
        x => x.Sale_Id,
        y => y.Sale_id,
        (x, y) => new userSales() {
                // x is SalesInfo  obj y is ClientDatas obj do assignement here
            Name = y.Name,
            Sale_Date = y.Sale_date     
         }).ToList();

仅供参考,我还没有机会测试它,但这是基本想法。您不需要像您的语句中那样选择,因为我传递给 join 的最后一个参数是 lambda (x, y) =&gt; ... 在这种情况下 x 和 y 是每个表中的当前行(我们从应用我们的 where到用户销售表,然后将这些结果加入到销售产品表中),因此您想做的任何预测都会发生在那里。上面的另外两个方法 args 是告诉 join 要比较哪些字段,它是每个表的 'key selector' lambda 表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多