大家好我正在尝试做一个非常简单的动态查询,它将动态选择列,即列的选择将取决于另一个查询。所以,如果条件1,我会选择col X,如果条件2,我将选择Y.
所以我尝试使用query.Select(colname)
使用扩展方法也尝试使用Func<>
,但我不知道如何去做。我已经阅读了关于linq的动态扩展以及反射但是对GetValue
函数的反射并没有为数据库中的列返回值。请帮助我,我只是想在运行时动态选择一个列,并且没有任何条件。
答案 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)
{
...
}
我希望这个人为的例子可以帮助你走上正轨。