Salva Entity Framework Linq Query nel database

entity-framework-4 expression-trees linq serialization

Domanda

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.

Risposta accettata

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());

Risposta popolare

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché