Linq to SQL Frage

10/02/2009 - 15:19 von Carsten Ilwig | Report spam
Hi Leute,

ich habe folgende Frage zum Aufbau einer Linq to Sql-Abfrage:

Hier ein abstraktes Beispiel:

private void myProcedure(params string[] _values)
{
var _data = (from _table in myDataContext.Table
where (_table.Key == 5) &&
((_values == null) || (_values.Length == 0) ||
(_values.Contains(_table.Name)))
select _table);
}

So funktioniert es ja nicht mit der Where-Klausel.
Wie muss ich diese aber nun aufbauen, damit sie die gewünschten Bedingungen
erfüllt?
Der Wert "_table.Name" soll nur geprüft werden, wenn in "_values" auch
wirklich etwas drin steht und es nicht "null" ist.
Bei einer "alten" SQL-Abfrage, hàtte ich die Whereklausel zur Laufzeit erst
zusammengebaut,
da bestand sie ja auch aus einer Zeichenkette, aber hier?
Wie macht man dass denn jetzt in Zeiten von Linq?


Vielen Dank für Eure Hilfe
Carsten
 

Lesen sie die antworten

#1 Frank Dzaebel
11/02/2009 - 07:37 | Warnen spam
Hallo Carsten,

Der Wert "_table.Name" soll nur geprüft werden, wenn in "_values" auch
wirklich etwas drin steht und es nicht "null" ist.



Du könntest doch innerhalb der Variablennamen auch
noch ein paar Unterstriche zusàtzlich einbauen ... ;-)
Ggf. mal "Richtlinien für die Benennung" durchlesen.
_______

Kannst Du nicht einfach vorher abfragen, ob Deine
values null oder deren Count==0 ist?
Mal als Beispiel die Northwind-DB:

dbDataContext db = new dbDataContext();

private void Form1_Load(object sender, EventArgs e)
{
var customers = KundenDeutschNachStadt("Berlin", "Mannheim");
Anzeige(customers);
}

private void Anzeige(IEnumerable<Customers> customers)
{
StringBuilder sb = new StringBuilder();
foreach (Customers c in customers)
sb.AppendLine(
"Name: " + c.ContactName + ", " +
"City: " + c.City + ", " +
"Country: " + c.Country);
MessageBox.Show(sb.ToString());
}

private IEnumerable<Customers> KundenDeutschNachStadt(
params string[] cityNames)
{
if (cityNames==null || cityNames.Count()==0)
return new Customers[]{};
var customers = from cust in db.Customers
where cityNames.Contains(cust.City) && cust.Country=="Germany"
select cust;
return customers;
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen