2016-08-30 2 views
0

Ich habe ein Problem mit aC# linq Abfrage, wo ich die! = Operator verwenden, funktioniert es gut in SQL, aber wenn ich die gleiche Abfrage in schreiben C# gibt ein anderes Ergebnis zurück. Dies ist der korrekte Weg zu den Ergebnissen, bei denen die Tabelle eine Spalte nicht mit der Spalte der Tabelle b übereinstimmt. Bitte sehen Sie meine SQL-Abfrage unten und dann meine C# -Abfrage.C# Linq Abfrage wo Tabelle A Spalte ist nicht gleich/nicht Mathe Tabelle B Spalte Join

SELECT tba.ID,fa.accountnumber,tba.Account_Number,fa.new_legalname,tba.Legal_Name,fa.new_deliverystatusname, fa.new_deliverystatus,tba.Delivery_Charge 
     FROM [CRM_Embrace_Integration].[dbo].[CRM_Tarsus_Debtors_Accounts] tba 
     inner join CRM_MBT_GROUP.dbo.FilteredAccount fa 
     ON fa.accountnumber collate database_default = tba.Account_Number 
     where fa.new_legalname collate database_default != tba.Legal_Name 

und die Linq Abfrage sieht wie folgt aus

var sqlJoinQuery = from accCRM in todaysCRMAccounts 
            join accSQL in todaysCRMViewAccounts 
            on accCRM.Account_Number equals accSQL.accountnumber 
            where accCRM.Legal_Name != accSQL.new_legalname 
            select new { accCRM.Legal_Name, accSQL.new_legalname }; 

Die SQL-Abfrage das richtige Ergebnis liefert, wie ich wo legal_name (Tabelle A) wollen ist nicht gleich legal_name (Tabelle B) ist die andere Tabelle .

Die Linq-Abfrage gibt ein falsches Ergebnis zurück, bitte helfen Sie.

+0

Linq sieht OK aus. Könnten Sie einen Snapshot oder Dummy-Daten teilen? –

+4

die sql macht ein '=' –

+0

@MB Danke für die Erkennung dieses Tippfehlers, behoben. – Papi

Antwort

0

Ihre SQL zeigt, dass Sie fragen, wo sie gleich sind. In der LINQ fragt man nach, wenn sie nicht gleich sind.

1

Ich schlage vor, die folgende Linq, um zu versuchen, wie Sie die Daten möchten, die nicht in der Tabelle sind 2:

var result1 = (from m in db1.Table1 
       select m).ToList(); 

var result2 = (from m in db2.Table2 
       select m).ToList(); 

var finalResult = (from m in result1 
        where !(from k in result2 
        select k.Id).Contains(m.Id) 
        select m).ToList(); 

Die oben zurückkehren, die nicht in Tabelle 2 sind. Ich hoffe, das ist was du wolltest.

Verwandte Themen