LINQ-LEFT-JOIN Mit einer LISTE<String>
Sagen, Sie haben eine Liste von IDs:
string str = "82174F2000000, 82174F2000001, 82174F2000002, 82174F2000003, 82174F2000004, 82174F2000005";
- Und Sie tun dies:
var tids = new List<string>(str.Replace(", ", ",").Split(','));
var tntable = tids.AsQueryable();
Und Sie vergleichen möchten, es in eine Tabelle mit einem Left Join:
var line = from c in db.Ctable
join l in tntable on c.CarID equals l.CarID into c_j
from l in c_j.DefaultIfEmpty()
select new
{
Name = c.OwnerName,
Hours = c.Hours
};
sieht aus wie die tntable nicht über ein Feld namens 'CarID'.
Kann mir bitte jemand helfen?
Dies ist für LINQ to Entity.
Habe ich dies gesehen:
Wie vergleichen Sie in List<String> in der DB-Tabelle mithilfe von LINQ
Aber nicht wissen, zu tun, einen LEFT JOIN.
TIA!
Ich weiß, das ist lange, aber vielen Dank für das Lesen.
AKTUALISIERT MichaC:
In der Datenbank in CTable wir haben diese CarIDs:
CarID
_____
82174F2000000
82174F2000001
82174F2000002
82174F2000003
Sagen wir einfach, die Tabelle (tntable) enthält den string zerlegt in Sätze:
CarID
_____
82174F2000000
82174F2000001
82174F2000002
82174F2000003
82174F2000004
82174F2000005
So, eine LEFT JOIN-wie diese:
SELECT C.CarID, T.CarID
FROM CTable C
LEFT JOIN tntable T ON C.CarID = T.CarID
Ausbeute:
T.CarID C.CarID
_______ _______
82174F2000000 82174F2000000
82174F2000001 82174F2000001
82174F2000002 82174F2000002
82174F2000003 82174F2000003
82174F2000004 NULL
82174F2000005 NULL
InformationsquelleAutor scv | 2012-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich lese Ihre Frage Recht es sieht aus wie Sie filtern möchten, auf der Grundlage einer Liste von IDs, die nicht durchführen einen left join. Ich denke, Sie wollen so etwas wie dieses:
UPDATE: Sie können sich den Enthält, überprüfen Sie, um die select-Anweisung, alles zurück.
UPDATE 2: Ok, wie über dieses. Nutze mein original zu ziehen, die relevanten Elemente von SQL, dann verwenden Sie Linq, um Objekte zu erstellen die Liste so wie Sie wollen. Die .ToList() erzwingt, um die SQL-Abfrage. Sie könnten auch verwenden .AsEnumerable().
das ist sehr cool, wenn es funktioniert. Ich werde es jetzt versuchen und Bericht erstatten.
Sieht aus wie Sie haben gute chakara. Nochmals vielen Dank.
MichaC, das ist ein Weg, um es zu arbeiten, aber es ist nicht wirklich ein LEFT JOIN. Sehen Sie CTable hat Millionen von Datensätzen und die oben genannten zurück, die Millionen. Irgendwelche Ideen, wie man einen LEFT JOIN, so dass es erst wieder am meisten, was in der Zeichenfolge?
Ich denke, das problem ist ich verstehe nicht ganz, was du bist suchen für. Option A zurückkehren wird, einfach die Spiele, anstatt die Millionen von Zeilen, aber dein Erster Kommentar mir vorgeschlagen, Sie wollte alles zurückgegeben mit dem Hinweis, ob jede Zeile in der Liste, also Option B. Wenn Sie nicht möchten, dass die Namen stehen und die Stunden, für all die Millionen von nicht-Spiele (posten, die nicht in tntable) nicht Option Ein geben Sie alles, was Sie brauchen? Benötigen Sie eine Anzahl von nicht-übereinstimmungen?
InformationsquelleAutor MichaC
Von Ihnen Kommentar Sie wollen, null ist, um noch wählen Sie ein Objekt für jede ID in
tntable
auch wenn die id nicht gefunden inctable
? Wenn ich verstehe, dass dann richtig, ich glaube, das geben Sie die gewünschte Wirkung.Ahh ich testete dies mit LINQ to Objects und es hat gut funktioniert es, ich kann nicht reproduzieren Ihre besonderen Fehler, wenn ich erstellt ein DB-Modell den Fehler bekomme ich wenn weit mehr kryptisch (Diese Methode unterstützt die LINQ to Entities-Infrastruktur und ist nicht dazu vorgesehen, direkt aus dem code.). Offensichtlich habe ich nicht genug wissen über das Entity Framework zu bieten, Ihre Antwort. Sorry.
Dank vossad01 für auch nur zu versuchen; aber du weißt, ich mag deine NULL. Nochmals vielen Dank.
InformationsquelleAutor vossad01
Haben Sie einen Blick auf diese :
Diese produziert:
Wenn Sie das nicht tun, was Sie wollen, dann haben Sie einen genaueren Blick auf Gewusst wie: Ausführen von Left Outer Joins (C# Programming Guide) auf der MSDN-Website.
Ich habe die oben genannten link-und MSDN-Hilfe-Seite für DefaultIfEmpty().
wenn Sie gehen, MSDN forum und eine Suche auf linq++entity+Links+join+string oder linq++entity+string, den Sie erhalten 1 post.
InformationsquelleAutor tymtam