linq查询显示结果两次

时间:2014-11-10 18:50:06

标签: c# linq

pd是我的页面;

ProductDetail pd = new ProductDetail();

获取数据并在数据中加强数据

var data = 
    from product in db.Products
    from orders in db.Orders
    from od in db.OrderDetails
    from dpt in db.Dpts
    where orders.CId.Equals(
        (from name in db.Companies
        where name.Cname.Equals(selectedcomp)
        select name.CId).FirstOrDefault())
    && od.OrdId.Equals(orders.OrdId) 
    && product.PId.Equals(od.PId)
    select new 
    { 
        orders.Billno , 
        orders.Date, 
        orders.pharm ,
        product.Pname,
        product.Purchasedate,
        product.Purchaserate,
        product.Salesrate,
        product.Supplier,
        od.Quantity,
        od.Amount
    };

它在列表框中显示两次数据的值。

pd.ProductDescription.ItemsSource = 
    (from dat in data
     select dat).ToList();                                    

3 个答案:

答案 0 :(得分:2)

我认为您的问题是Dpts表的交叉连接。您不在where或select中使用该表中的结果,因此我认为您不需要它。尝试删除from dpt in db.Dpts并查看是否可以解决您的问题。我的猜测是你得到n个重复项,其中n是db.Dpts中的总行数。

答案 1 :(得分:0)

从LINQ或SQL中的查询中获取重复项时,首先检查错误数据,然后将其作为错误连接进行调查。最好的办法是将其拆分为一个表,然后逐个添加连接,直到获得重复。然后使该连接具体到足以使其停止复制。

答案 2 :(得分:0)

@juharr是对的。您不在where子句中使用db.Dbts,因此您将交叉连接重复结果。可能在db.Dbts表中有2条记录。

我认为您应该处理您的查询。 几点提示:

  • 我们不使用交叉联接,而是使用 join 声明
  • 您应该在执行主查询之前获得CId
  • 可能您的数据库中没有外键,您应该考虑