14 Stimmen

Rückgabe eines einzelnen Wertes mit Linq to SQL

Ich lerne gerade Linq to SQL und habe Schwierigkeiten, es zu verstehen. Ich versuche, einfach einen einzelnen (booleschen) Wert in C# mit einer Linq-Abfrage zurückzugeben.

Ich möchte wissen, ob der Eigentümer eines Beitrags eine E-Mail-Benachrichtigung wünscht, wenn neue Kommentare hinzugefügt werden. Ich möchte, dass die Methode, die das Linq to SQL enthält, einen booleschen Wert zurückgibt.

 public bool NotifyOnComment(string username){
        var notify = (from s in db.AccountSettings
                      where s.UserName == username
                      select s.NotifyOnComment).DefaultIfEmpty(false);

        // clueless
    }

Aktualisierung:

Ich mache jetzt Folgendes:

var notify = (from s in db.AccountSettings
                      where s.UserName == username
                      select s.NotifyOnComment).SingleOrDefault();

        return (bool)notify;

29voto

Joey Punkte 329386

Linq gibt standardmäßig immer Sammlungen zurück. Wenn Sie einen einzelnen Wert benötigen, können Sie die .Single() , .SingleOrDefault() o .First() o .FirstOrDefault() Methoden.

Sie unterscheiden sich leicht in ihren Aufgaben. Single() y SingleOrDefault() funktioniert nur, wenn es eine genau o allenfalls einen Datensatz im Ergebnis. First() y FirstOrDefault() wird funktionieren, auch wenn es mehr Ergebnisse gibt.

Le site *OrDefault() Varianten geben den Standardwert für den Typ zurück, falls das Ergebnis keine Datensätze enthält.

9voto

Justin Niessner Punkte 235353
var notify = (from s in db.AccountSettings
              where s.UserName == username
              select s.NotifyOnComment).DefaultIfEmpty(false).First();

//notify will either hold a bool or the AccountSettings object so
return (!(notify == false)); // Thanks Nick. Amazing what you'll do in a hurry.

4voto

Necro Punkte 41
var notify = (from s in db.AccountSettings
              where s.UserName == username
              select s.NotifyOnComment).Count();

return  Convert.ToBoolean(notify);

1voto

bruno conde Punkte 47059

Wenn Sie nur ein Ergebnis erwarten, verwenden Sie einfach Single o SingleOrDefault um das bool zu erhalten. Wenn Sie das erste Ergebnis wollen, können Sie verwenden First o FirstOrDefault .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X