日期:2014-05-17  浏览次数:20701 次

EntityFramework Lambda表达式代码
本帖最后由 ZIP_xG 于 2012-12-19 19:09:36 编辑

public class BaseEntity
{
    public Guid Index{get;set;}
}

public class Test : BaseEntity
{
    public string Name{get;set;}
    public string Sort{get;set;}
}


正常情况下:

var DbSet = DbContext.Tests; //Tests->DbSet<Test>
var result = DbSet.OrderBy(t=>t.Sort).ToArray();

现在的情况:

DbSet = DbContext.Set<TEntity>();
//传进来的TEntity是Test类型,但是我们只知道是继承BaseEntity的
//result = ?


我想到的:

DbSet = DbContext.Set<TEntity>();
var express = Expression.Lambda<Func<TEntity, TKey>>(Expression.Convert(Expression.Property(Expression.Parameter(typeof(TEntity), "t"), typeof(TEntity).GetProperty("Sort")), typeof(object)), Expression.Parameter(typeof(TEntity), "t"));
result = DbSet.OrderBy(express).ToArray();

TKey要是string类型
但我想要动态的,从TEntity上的某个属性上获取类型
何解?
------解决方案--------------------
不可以,Sort是派生类的成员,你都不能保证父类的对象一定有它,怎么能使用呢?
------解决方案--------------------
LZ能否提供更多的代码作为参考