Enregistrer la requête Linq Entity Framework dans la base de données

entity-framework-4 expression-trees linq serialization

Question

Je me demandais si nous pouvions convertir une requête Linq sur Entity Framework et enregistrer la requête dans la base de données en la convertissant en un arbre d'expression et en sérialisation. Quelqu'un peut-il m'aider s'il vous plaît à ce sujet et me diriger dans la bonne direction si cela peut être fait ou non. Toute aide est grandement appréciée à ce sujet.

Merci, Ajay.

Réponse acceptée

J'ai publié une bibliothèque à cet effet hier. Serialize.Linq . Il sérialise les expressions linq en XML, JSON ou binaire.

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

Réponse populaire

Utilisez Sprint.Filter.OData . Il convertit un Func<T,bool> en chaîne et revient au code.

Échantillon:

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;
}

Vous pouvez également l'utiliser comme un paquet Nuget



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow