我会使用System.Linq.Dynamic .
我添加了指定的Dynamic.vb
文件,其开头如下:
Option Strict On
Option Explicit On
Imports System.Collections.Generic
Imports System.Text
Imports System.Linq
Imports System.Linq.Expressions
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Threading
Imports System.Runtime.CompilerServices
Namespace System.Linq.Dynamic
Public Module DynamicQueryable
到我的 (VB.NET) 解决方案。
现在 Visual Studio 不再识别项目文件中的 System.XXX
引用,建议我将它们更改为 Global.System.XXX
Das 是什么,如何管理它?
最佳答案
看起来好像正在发生一些命名空间隐藏。在 VB.NET 项目中,存在一个根命名空间,默认情况下该命名空间设置为您的项目名称。您可以从项目 -> 属性 -> 应用程序 -> 根命名空间进行检查。
当类显式指定 namespace 时,根 namespace 将作为其前缀。例如,假设您的根命名空间是 RootNs
。由于DynamicLinq.vb
文件指定System.Linq.Dynamic
命名空间,这实际上是RootNs.System.Linq.Dynamic
。这会隐藏常规 .NET System
命名空间,这就是 Visual Studio 提示您为所有命名空间添加 Global
前缀的原因。
值得注意的是,在 C# 中这个概念是不同的,所以我不认为当有人使用 C# 版本的 DynamicLinq
时会出现这个问题。
要解决此问题,您有几个选项(选择一个):
从
DynamicLinq.vb
中删除命名空间声明,并从该文件内使用System.Linq.Dynamic
的对象中删除所有完整限定条件。换句话说,System.Linq.Dynamic.Signature
变为Signature
。要在其他地方使用它,请添加Imports System.Linq.Dynamic
。将根命名空间从“项目/属性/应用程序”中删除,并将其设置为空白。通过这样做,您的项目将更像 C#,并且您应该在所有类中显式指定 namespace 。要在其他地方使用它,请添加
Imports System.Linq.Dynamic
。保留根命名空间,仅更改
DynamicLinq.vb
的命名空间。例如,将其更改为NewNs.Linq.Dynamic
并像以前一样从Signature
中删除完整限定条件。要在其他地方使用它,请添加Imports RootNs.NewNs.Linq.Dynamic
(注意RootNs
前缀)。
关于.net - VB.NET 和 System.Linq.Dynamic 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7030685/