Created
March 5, 2015 10:49
-
-
Save danpette/5f616a7ceee921d9783d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Data.Entity; | |
using System.Linq; | |
using System.Linq.Expressions; | |
using System.Web; | |
namespace Admin.Helpers | |
{ | |
public class IQueryablePropertyHelper | |
{ | |
/** | |
* Eksempel på kall til denne funksjonen | |
* | |
* #Felt | |
* string field = "Kommunenavn"; | |
* | |
* #Tabell | |
* var entities = database.Set<Entities.DeklarasjonerRapport>(); | |
* | |
* #Utvalg | |
* var query = entities.Where(x => x.ID > 3); //Set spørring | |
* | |
* #Til liste | |
* List<string> records = Helpers.IQueryablePropertyHelper.SelectProperty<Entities.DeklarasjonerRapport>(query, field); | |
* | |
*/ | |
public static IQueryable SelectProperty<TEntity>(IQueryable query, string propertyName) where TEntity : class | |
{ | |
var parameter = Expression.Parameter(typeof(TEntity), "instance"); | |
var propertyAccess = Expression.Property(parameter, propertyName); | |
var projection = Expression.Lambda(propertyAccess, parameter); | |
var selectExpression = Expression.Call( | |
typeof(Queryable).GetMethods() | |
.First(x => x.Name == "Select") | |
.MakeGenericMethod(new[] { typeof(TEntity), propertyAccess.Type }), | |
query.Expression, | |
projection); | |
var distinctExpression = Expression.Call( | |
typeof(Queryable).GetMethods() | |
.First(x => x.Name == "Distinct") | |
.MakeGenericMethod(new[] { propertyAccess.Type }), | |
selectExpression); | |
var result = query.Provider.CreateQuery(distinctExpression); | |
return result; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment