使用LINQ动态选择列?

使用LINQ动态选择列?,linq,dynamic,Linq,Dynamic,大家好,我正在尝试做一个非常简单的动态查询,它将动态选择一列,即列的选择将取决于另一个查询。因此,如果条件1,我将选择X列,如果条件2,我将选择Y列 因此,我尝试了使用query.Select(colname)使用扩展方法,也尝试了使用Func,但我不确定如何执行此操作。我已经读过关于linq的动态扩展以及反射的内容,但是反射到GetValue函数不会返回数据库中我的列的值。请帮助我,我只是尝试在运行时动态地选择一个列,而实际上没有任何条件。我认为最简单的事情就是动态地建立查询。现在让我们假设所

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


因此,我尝试了使用
query.Select(colname)
使用扩展方法,也尝试了使用
Func
,但我不确定如何执行此操作。我已经读过关于linq的动态扩展以及反射的内容,但是反射到
GetValue
函数不会返回数据库中我的列的值。请帮助我,我只是尝试在运行时动态地选择一个列,而实际上没有任何条件。

我认为最简单的事情就是动态地建立查询。现在让我们假设所有可能的列都具有相同的类型--string。请注意,您可以通过在选择的任何列上调用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)
 {
     ...
 }
var query=db.Widgets.Where(w=>w.Price>10M);
IEnumerable display=null;
如果(如名称)
{
display=query.Select(w=>w.Name);
}
else if(如描述)
{
display=query.Select(w=>w.Description);
}
其他的
{
显示=查询。选择(w=>w.Name+”(“+w.Description+”);
}
foreach(显示中的变量项)
{
...
}

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

我认为最简单的事情就是动态地构建查询。现在让我们假设所有可能的列都具有相同的类型--string。请注意,您可以通过在选择的任何列上调用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)
 {
     ...
 }
var query=db.Widgets.Where(w=>w.Price>10M);
IEnumerable display=null;
如果(如名称)
{
display=query.Select(w=>w.Name);
}
else if(如描述)
{
display=query.Select(w=>w.Description);
}
其他的
{
显示=查询。选择(w=>w.Name+”(“+w.Description+”);
}
foreach(显示中的变量项)
{
...
}
我希望这个人为的例子能帮助你走上正轨