Mi chiedevo se siamo in grado di convertire una query di Linq su Entity Framework e salvare la query nel database convertendola in un albero di espressione e in serializzazione. Qualcuno può per favore aiutarmi su questo e indicarmi la direzione giusta se questo può essere fatto o meno. Qualsiasi aiuto è molto apprezzato su questo.
Grazie, Ajay.
Ho rilasciato una libreria per questo scopo proprio ieri. Serialize.Linq . Serializza le espressioni linq su xml, json o binary.
using System.Linq.Expressions
using Serialize.Linq.Extensions;
Expression<Func<Person, bool>> query = p => p.LastName == "Miller"
&& p.FirstName.StartsWith("M");
Console.WriteLine(query.ToJson());
Console.WriteLine(query.ToXml());
Usa Sprint.Filter.OData . Converte un Func<T,bool>
in stringa e torna al codice.
Campione:
public class TestSprintOData
{
public static void Run()
{
// Parse a Func into string
var query = Filter.Serialize<User>(u => u.IsActive && u.Email.Contains("@gmail.com"));
// It'll generate the string "IsActive and substringof('@gmail.com', Email)"
// Convert back to Expression, perhaps on server
var query2 = Filter.Deserialize<User>(query);
// Compiles to Func, so you can use as delegate to Where
var f = query2.Compile();
var list = new List<User>
{
new User{Name="Johnny", IsActive = true, Email = "johnny@gmail.com"},
new User{Name="abc", IsActive = false, Email = ""},
new User{Name="dude", IsActive=true, Email = "dude@gmail.com"}
};
var result = list.Where(f);
}
}
class User
{
public string Name;
public string Phone;
public string Login;
public string Email;
public bool IsActive;
}
Puoi anche usarlo come pacchetto Nuget