Skip to content

Instantly share code, notes, and snippets.

@danpette
Created March 5, 2015 10:49
Show Gist options
  • Save danpette/5f616a7ceee921d9783d to your computer and use it in GitHub Desktop.
Save danpette/5f616a7ceee921d9783d to your computer and use it in GitHub Desktop.
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