使用LINQ动态选择列?

时间:2010-04-26 21:29:25

标签: linq dynamic

大家好我正在尝试做一个非常简单的动态查询,它将动态选择列,即列的选择将取决于另一个查询。所以,如果条件1,我会选择col X,如果条件2,我将选择Y.

所以我尝试使用query.Select(colname)使用扩展方法也尝试使用Func<>,但我不知道如何去做。我已经阅读了关于linq的动态扩展以及反射但是对GetValue函数的反射并没有为数据库中的列返回值。请帮助我,我只是想在运行时动态选择一个列,并且没有任何条件。

1 个答案:

答案 0 :(得分:5)

我认为最简单的方法是简单地动态构建查询。让我们假设目前所有潜在的列都具有相同的类型 - 字符串。请注意,您可以通过在所选列的任何列上调用ToString()来强制执行此操作。这很重要,因为所选对象都需要相同的类型。然后使用查询条件构建查询,并使用扩展方法选择正确的列选择以标记到查询。

 var query = db.Widgets.Where( w => w.Price > 10M );
 IEnumerable<string> display = null;
 if (likesName)
 {
    display = query.Select( w => w.Name );
 }
 else if (likesDescription)
 {
    display = query.Select( w => w.Description );
 }
 else
 {
    display = query.Select( w => w.Name + " (" + w.Description + ")" );
 }

 foreach (var item in display)
 {
     ...
 }

我希望这个人为的例子可以帮助你走上正轨。