实体框架-Linq2SQL获取动态选择列的值



我有一个描述我的模型的POCO类:

public class Example
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public string Prop3 { get; set; }
}

我想做的是一个扩展方法,使用实体框架DbSets:以这种方式投影我的类

var qry = db.Examples.Select(x => new {
    Prop1 = x.Prop1,
    Prop2 = x.Prop2,
    Prop3 = x.Prop3,
    Description = XXXXX
}).ToList();

其中XXXXX是Prop1、Prop2或Prop3属性的值,其名称I现在仅在运行时作为字符串。

我不能使用Dynamic Linq,因为我的目标是实体框架核心,我对Linq表达式越来越着迷,我认为我离解决方案还有很长的路要走。。。你能提供一些指导吗?

显式获取Description所需的所有属性时,可以在不获取Description的情况下获取查询,然后从加载的数据中生成所需的查询。

假设用于设置Description的属性的名称存储在name变量中:

var qry1 = db.Examples.Select(x => new {
    Prop1 = x.Prop1,
    Prop2 = x.Prop2,
    Prop3 = x.Prop3,
}).ToList();
var qry = qry1.Select(x => new {
    Prop1 = x.Prop1,
    Prop2 = x.Prop2,
    Prop3 = x.Prop3,
    Description = name == "Prop1"? x.Prop1 : name == "Prop2"? x.Prop2: x.Prop3
}).ToList();

如果你不喜欢对名称进行硬编码,你可以使用反射来获得值:

Description = GetProp(x, name)

其中GetProp为:

private string GetProp(object y, string name)
{
   return y.GetType().GetProperty(name).GetValue(y).ToString();
}

相关内容

  • 没有找到相关文章

最新更新