我会使用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,以及如何管理它?
答案 0 :(得分:2)
看起来好像发生了一些命名空间隐藏。在VB.NET项目中,存在一个根命名空间,默认情况下设置为项目名称。您可以从项目 - >中查看此内容属性 - >申请 - >根名称空间。
当类显式指定命名空间时,根命名空间会以其为前缀。例如,假设您的根命名空间为RootNs
。由于DynamicLinq.vb
文件指定了System.Linq.Dynamic
的命名空间,因此这是RootNs.System.Linq.Dynamic
。这会隐藏常规的.NET System
命名空间,这就是Visual Studio提示您使用Global
为所有命名空间添加前缀的原因。
值得注意的是,在C#中这个概念是不同的,所以当有人使用DynamicLinq
的C#版本时,我不希望出现这个问题。
要解决此问题,您可以选择一些选项(选择一个):
从DynamicLinq.vb
中删除名称空间声明,并从该文件中使用System.Linq.Dynamic
的对象中删除所有完整限定条件。换句话说,System.Linq.Dynamic.Signature
变为Signature
。要在其他地方使用它,请添加Imports System.Linq.Dynamic
。
通过将其命名为空来从项目/属性/应用程序中删除根命名空间。通过这样做,您的项目将更像C#,您应该在所有类中明确指定名称空间。要在其他地方使用它,请添加Imports System.Linq.Dynamic
。
保留根命名空间,只需更改DynamicLinq.vb
的命名空间。例如,将其更改为NewNs.Linq.Dynamic
,并像以前一样从Signature
中删除完整的资格。要在其他地方使用它,请添加Imports RootNs.NewNs.Linq.Dynamic
(注意RootNs
前缀)。