【问题标题】:EF - Common Query AgainEF - 再次常见查询
【发布时间】:2011-04-26 10:27:02
【问题描述】:

参考this post,可惜我又出问题了。

实际上,并非我的所有实体都包含相同的公共属性,但我需要继承/实现我的接口,因此,在某些情况下,属性仅是声明性的,否则在其他情况下。

问题来了:

public static IQueryable<T> Create<T>(ObjectContext context) 
    where T : class, IEntity
{         
    var query = context.CreateObjectSet<T>().AsQueryable();         
    return query.Where(x => x.CommonProperties == "some value"); // problem here!!    
} 

事实上,如果我的两个实体(文档)都不包含公共属性或其中任何一个,最终的查询将无法浏览,并且会生成异常。

我尝试使用以下代码 sn-p 没有成功:

System.Reflection.PropertyInfo p = query.ElementType.GetProperty("common1");
if (p != null) query = query.Where(x => x.common1 == "value.."); // problem here!!

在这种情况下p 变量永远不会null,所以我的查询注定要失败..

请帮帮我..

【问题讨论】:

  • 哦,你这个可怜的家伙,到底是谁逼着你为没有共同点的东西编写通用查询代码?好吧,如果你真的必须,看看 Bennor McCarthy 在这个问题中的精彩回答:stackoverflow.com/questions/4782001/… 它并没有涵盖完全相同的问题,而是一个非常相似的问题,所以也许你需要调整重反射代码 sn -ps 在答案中。但这是一个起点。祝你好运!
  • @Slauma:几天前就开始了stackoverflow.com/questions/5496713/entity-wrapper-custom ...仍然是同样的问题,仍然是同样的任性。

标签: c# entity-framework


【解决方案1】:
ParameterExpression itemParameter = Expression.Parameter(typeof(T));
return query.Where(Expresion.Equal(Expression.Property(itemParameter, "COMMONPROP_NAME"), Expression.Constant("VALUE")));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多