【问题标题】:Building which properties to select with LINQ To Object使用 LINQ To Object 构建要选择的属性
【发布时间】:2010-11-20 23:40:48
【问题描述】:

我正在尝试在运行时构建一个 LINQ 查询,以便只选择某些属性。我已经想到了能够通过向我的查询附加额外的 .Select() 调用或使用动态 LINQ 扩展来传递一串列来构建查询的方法(希望远离字符串构建查询) .但是,我目前寻找解决方案的尝试没有奏效。

【问题讨论】:

  • 你能详细说明一下吗?您是否试图让用户传入他们想要选择的字段?
  • 用户正在选择他们想要的信息。
  • LINQ 是必需的吗?我认为不知道您的对象将具有哪些字段会使针对查询结果的编码变得困难。也许回到数据集时代会更合适?

标签: c# .net linq dynamic


【解决方案1】:

您需要查看 linq 表达式。这是一个小例子,应该适用于选择单个属性,选择更多变得更加困难,但如果您使用您正在选择的属性定义类型(例如,不要在您的查询中使用匿名类型)正在生成)。

using System.Linq.Expressions;
...


IQueryable<T> query = someQuery;
Expression expression = query.Expression;

ParameterExpression obj = Expression.Parameter(query.ElementType, "obj");
MemberExpression property = Expression.PropertyOrField(obj, propertyName);
Expression<Func<T,bool>> lambda = Expression.Lambda<Func<T,bool>>(property, obj);
query = query.Where(lambda);

至少,大体上是这样

【讨论】:

  • 您可能是对的,是时候深入研究 LINQ 表达式树的工作原理了。
【解决方案2】:

正如贾斯汀所说,你的困难将是找到一种返回的类型。 LINQ 的优点是您可以使用强类型实体。如果这些对您不利,或者您发现自己做了大量的工作有悖常理,那么可能有更好的解决方案。

【讨论】:

    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多