2009-06-23 12 views
0

Ich versuche, eine LINQ-Anweisung Handwerk wie folgt:Verwirrende LINQ-Anweisung

Das Ergebnis zwischen zwei Terminen (heute im Grunde) OR das Ergebnis sollte eine „batchstatus“ Spalte folgen soll, die falsch ist gleich (hat nicht bereits verifiziert) das Ergebnis sollte eine "ready" -Spalte haben, die wahr ist (ist bereit, verifiziert zu werden).

So Verifier können alle Daten von heute sehen, unabhängig davon, ob es verifiziert wurde oder nicht, ABER sollte nicht sehen, dass die Benutzer noch nicht bereit sind, gesehen zu werden.

Ich habe dies mehrere verschiedene Arten versucht, wie zum Beispiel:

Dim p = From t In db.batches _ 
     Where t.bDate > day1 And t.bDate < day2 And t.Ready = True Or t.BatchStatus = False _ 
      Order By t.BatchStatus Ascending _ 
      Select t 

Bitte helfen Sie mir meine Haare zu halten; Ich habe jetzt eine Handvoll & Ich weiß nicht, wie viel länger ich davon halten kann, es herauszuziehen !!!

Danke!

+0

Wenn Sie Ihre Erklärung klarer machen könnte, wäre es einfacher zu erstellen das richtige machen Abfrage. Es ist überhaupt nicht klar, wie die drei Faktoren (ist es fertig? Ist der Chargenstatus falsch? Ist es von heute?) Sollen kombiniert werden. –

Antwort

1

Klammern verwenden. Es macht die Dinge ein Los einfacher. Darüber hinaus können Sie Let-Klauseln verwenden, um Ihre Abfrage einfacher zu machen und Ihnen effektiv "lokale Variablen" in der Abfrage zu geben. Probieren Sie das aus - die Syntax kann leicht abweichen (ich bin kein VB-Typ) und die Logik ist möglicherweise nicht genau das, was Sie wollen, aber es ist einfacher, IMO zu verstehen, sollte also leichter zu ändern sein.

Dim p = From t In db.batches _ 
     Let createdToday = t.bDate > day1 And t.bDate < day2 _ 
     Where createdToday And (t.Ready Or Not t.BatchStatus) _ 
     Order By t.BatchStatus Ascending 
1

Was:

Dim p = From t In db.batches _ 
     Where (t.bDate.Date = DateTime.Today Or t.BatchStatus = False) _ 
       And t.Ready = True _ 
      Order By t.BatchStatus Ascending _ 
      Select t 
+1

Dieser hat auch funktioniert ... Ich kann nicht beide die Antwort sein lassen? Ich mag diesen, weil ich die Datetime nie benutzt habe. Heute vorher. Ich habe tatsächlich eine kleine Funktion, die 2 Zeichenfolgen erstellt, die 23. Juni 2009 sind 12:00:00 AM & 23. Juni 2009 23:59:00 PM; Wow, ich fühle mich wie ein Depp ... – wali

0

Dank Jon !!! Es war Klammer in meinem Fall:

Dim p = From t In db.batches _ 
      Where (t.bDate > day1 And t.bDate < day2 And t.Ready = True) Or (t.BatchStatus = False And t.Ready = True) _ 
      Order By t.BatchStatus Ascending _ 
      Select t 

Nochmals vielen Dank .... Haare langsam von Todesgriff entfernt werden ...