Query con PredicateBuilder

giovedì 06 dicembre 2012 - 13.26
Tag Elenco Tags  C#  |  .NET 4.0

Gemini Profilo | Expert

Ciao a tutti
Sto per la prima volta utilizzando EF e ho generato le classi POCO dal DataModel.
Per scrivere le query parametri sto provando ad utilizzare PredicateBuilder.
Pensavo di aver capito come funzionava, ma al lato pratico... non ci ho capito nulla :-)
Ho questa query:

string sqlStatus = string.Empty;
if (status == "ON")
sqlStatus = " AND isapproved='1' ";
else if (status == "OFF")
sqlStatus = " AND isapproved='0' ";

string sql = "SELECT u.* " +
"FROM aspnet_Users u INNER JOIN aspnet_Membership m ON u.UserId=m.UserId " +
"WHERE 1 " + sqlStatus +
"GROUP BY u.UserId " +
"ORDER BY u.UserName";

Devo riscrevere la query utilizzando PrediteBuilder e quì nascono i problemi. Negli esempi che ho trovato tutti i predicati sono definiti in funzioni, mentre io vorrei definire le condizioni nella stessa funzione in cui definisco l'interrogazione che devo eseguire.
Partendo da questo esempio:

staticvoid QueryCustomers (Expression<Func<Purchase, bool>> purchasePredicate)
{
var data = newDemoData ();
var query =
from c in data.Customers.AsExpandable ()
where c.Purchases.Any (purchasePredicate.Compile ())
select new {
c.Name,
FilteredPurchases =
from p in c.Purchases.Where (purchasePredicate.Compile ()) select p.Price
};
}

Ho scritto questo:

Expression<Func<aspnet_Membership, bool>> sqlStatus;
if(status == "ON")
sqlStatus = u => u.IsApproved == true;
else if(status == "OFF")
sqlStatus = u => u.IsApproved == false;

using (mcEntities context = new mcEntities())
{
var query =
from c in context.aspnet_Users.AsQueryable()
where c.aspnet_Membership.
}

Ora quando vado a scrivere 'where c.aspnet_Membership" non mi da 'Where' tra le possibili opzioni, ma visualizza i metodi e le proprietà di aspnet_Membership.

Dove sbaglio? Chi può riscrivere la mia query in modo da capire come fare per le altre query?
Dove posso trovare esempi pratici e non solo parti di codice per capire come funziona PredicateBuilder?
C'è qualche alternativa a PredicateBuilder per scrivere query parametriche con linq che mi permetta di avere un codice pulito, di definire le condizioni nella stessa procedura della quesry e utilizzare la struttura:
var test =
from...
where...
select...

Grazie mille
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5