2015-04-20 23 views
0

我想选择一个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(); 
+0

要了解您的要求非常困难。您在理解.Where()函数时遇到困难吗?你有没有试过db.SaleProducts.Where(c => c.productId == SomeProductId) – XenoPuTtSs

回答

0

你不是在寻找一个地方,你正在寻找一个连接。在单个表格上过滤结果的地方,join与两个表格实际上是你想要的。

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(); 

只是我没有机会去测试,但它是基本的想法。你不需要在你的语句中选择,因为我传入的最后一个参数是lambda (x, y) => ...,在这种情况下,x和y是每个表的当前行(我们已经从应用我们的地方获得了用户销售表,然后将这些结果加入销售产品表),所以无论您想要做什么预测都会发生。上述另外两个方法是告诉连接哪些字段进行比较,它是每个表的“关键选择器”lambda表达式。