Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 用组合文本替换linq where子句中的字段名_Vb.net_Linq_Linq To Sql - Fatal编程技术网

Vb.net 用组合文本替换linq where子句中的字段名

Vb.net 用组合文本替换linq where子句中的字段名,vb.net,linq,linq-to-sql,Vb.net,Linq,Linq To Sql,我有一个包含6个文本NA、PO、FA、GO、VG、EX的组合,我想对组合中用作where子句中字段的所选值进行Linq查询。例如: 'if "NA" is selected : Dim query = from t in db.table where t.NA > 0 Select t 'If "PO" is selected : Dim query = from t in db.table where t.PO > 0 select t 等等 如何以优雅的方式执行此操作,而无需编

我有一个包含6个文本NA、PO、FA、GO、VG、EX的组合,我想对组合中用作where子句中字段的所选值进行Linq查询。例如:

'if "NA" is selected :
Dim query = from t in db.table where t.NA > 0 Select t
'If "PO" is selected :
Dim query = from t in db.table where t.PO > 0 select t
等等


如何以优雅的方式执行此操作,而无需编写6 if语句或使用Select case

您必须使用反射来根据所选字符串获取PropertyInfo。然后在LINQ查询中使用它。去数据库可能会让人难过,不过。。。不试一下我不确定。您可以在LINQ查询中使用PropertyInfo,如下所示:

Dim selectedPropertyInfo = db.table.GetType().GetProperties().FirstOrDefault(p => p.Name == "NA")

Dim query = from t in db.table
            where selectedPropertyInfo.GetValue(t, null) > 0
            select t;

很抱歉,我无法理解您的解决方案,也没有找到如何使用PropertyInfo.GetValue替换字符串字段名的示例。你能告诉我链接吗?我添加了一行代码,告诉你如何获取PropertyInfo。如果你没有很好地理解反射,那么我的解决方案可能不会有太大帮助。你的想法和概念是正确的,也许你在c中的语法也是正确的。我没有测试,但是vb.net中的语法有点不同。最后,我成功地将您的想法转换为一个可工作的vb.net代码Dim field_name=NA Dim query=from t in db.table.asenumrable.wherefunctionf f.gettype.getpropertyfield_name.GetValuef,nothing>0选择t我不知道为什么我必须在vb.net中添加一个numrable才能工作。非常感谢你的解释,很抱歉我花了那么长时间才收到。