【问题标题】:Linq Query Join two tables getting duplicate valuesLinq Query连接两个表获得重复值
【发布时间】:2021-09-09 11:27:57
【问题描述】:
using System;
using System.Linq;
using System.Collections.Generic;

                    
public class Program
{
    public static void Main()
    {
        // Customer collection
        IList<Customer> CustomertList = new List<Customer>() { 
                new Customer() { CustomerID = 1, CustomerName = "John", OrderID = 04 } ,
                new Customer() { CustomerID = 2, CustomerName = "Moin",  OrderID = 07 } ,
            };
        
        // Transaction collection
        IList<Transaction> TransactionList = new List<Transaction>() { 
            new Transaction() { TransactionID = 1, OrderID = 04, Purchased = "TV",StoreName ="Amazon"} ,
            new Transaction() { TransactionID = 2, OrderID = 07, Purchased = "Laptop",StoreName ="Ebay"} ,
            new Transaction() { TransactionID = 3, OrderID = 07, Purchased = "Mobile",StoreName ="Ebay"} ,
        };
        
        // LINQ Query 
        var result =(from Cus in CustomertList
                     join TRan in TransactionList on Cus.OrderID equals TRan.OrderID
                     select new 
                     {
                     CustomerName =Cus.CustomerName,
                     OrderID = Cus.OrderID,
                     StoreName =TRan.StoreName
                     }).ToList();
        
        
        foreach(var Cus in result){         
            Console.WriteLine( "Name - {0} ,  Order ID - {1} , StoreName - {2}",Cus.CustomerName , Cus.OrderID,Cus.StoreName);
        }
    }
}

public class Customer
{
    public int CustomerID { get; set; }
    public string CustomerName { get; set; }
    public int OrderID { get; set; }
}

public class Transaction
{
    public int TransactionID { get; set; }
    public int OrderID { get; set; }
    public string Purchased  { get; set; }
    public string StoreName  { get; set; }
}

结果:
名称 - 约翰,订单 ID - 4,商店名称 - 亚马逊
名称 - Moin,订单 ID - 7,商店名称 - Ebay
名称 - Moin,订单 ID - 7,商店名称 - Ebay

从上面的代码我得到上面的结果,我需要显示所有订单和客户名称以及他们购买的商店,但是我得到重复的值,我输入了正常的连接查询,但我需要低于预期的结果.

预期结果:
名称 - 约翰,订单 ID - 4,商店名称 - 亚马逊
名称 - Moin,订单 ID - 7,商店名称 - Ebay。

【问题讨论】:

    标签: c# linq lambda


    【解决方案1】:

    试试这个

    .....
     select new
                  {
                      CustomerName = Cus.CustomerName,
                      OrderID = Cus.OrderID,
                      StoreName = TRan.StoreName
                  }).Distinct().ToList();
    

    【讨论】:

      【解决方案2】:

      这是重复的,因为您的密钥是重复的...如果您尝试 Serge 所说的,它会正常工作。

       // LINQ Query 
              var result =(from Cus in CustomertList
                           join TRan in TransactionList on Cus.OrderID equals TRan.OrderID
                           select new 
                           {
                               CustomerName =Cus.CustomerName,
                               OrderID = Cus.OrderID,
                               StoreName =TRan.StoreName
                           }).Distinct().ToList();
      

      或者您可以在结果查询之前按CustomerName, OrderID and StoreName 中的TransactionList 分组。使用 GroupBy 你不需要使用 Distinct()

      【讨论】:

        猜你喜欢
        • 2019-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多