Sql 如何使用存储字典的Linq查询arraylist

Sql 如何使用存储字典的Linq查询arraylist,sql,vb.net,linq,dictionary,arraylist,Sql,Vb.net,Linq,Dictionary,Arraylist,以下代码从oracle data reader读取查询结果,并将每条记录存储在字典中,并将字典附加到数组列表中: Dim dr As OracleDataReader=cmd.ExecuteReader() '循环oracle数据记录并将其存储到字典 '将字典附加到数组列表 Dim arr作为新阵列列表 当雷德博士 Dim dict作为新字典(字符串、对象) 对于计数为整数=0到(dr.FieldCount-1) dict.Add(dr.GetName(count),dr(count)) 下一个

以下代码从oracle data reader读取查询结果,并将每条记录存储在字典中,并将字典附加到数组列表中:

Dim dr As OracleDataReader=cmd.ExecuteReader()
'循环oracle数据记录并将其存储到字典
'将字典附加到数组列表
Dim arr作为新阵列列表
当雷德博士
Dim dict作为新字典(字符串、对象)
对于计数为整数=0到(dr.FieldCount-1)
dict.Add(dr.GetName(count),dr(count))
下一个
附件添加(dict)
结束时

如何编写可用于从存储在数组列表中的字典中检索值的LINQ查询?请帮忙。我一直在搜索,没有得到任何好的答案。首先,永远不要使用数组列表。它是为了向后兼容而存在的,但没有任何用途。我可以简明扼要地回答-LINQ与
ArrayList
没有任何关系。使用generic
List(Of T)
和LINQ搜索其中的值。也不需要
字典
。这是老式的。我们使用了
字典
,因为它有

我明白了,您正在尝试创建表结构,但不需要这样做。首先,有
System.Data.DataTable
,可以在客户端查询

或者使用这种技术

公共类用户
作为整数的公共属性Id
作为字符串的公共属性名称
公共属性电子邮件作为字符串
作为字符串的公共财产国家
末级
私有函数LoadUsers()作为(用户的)列表
Dim uList作为新列表(用户)()
“这里有一些代码
而里德博士
Dim u作为新用户()
u、 Id=dr(“Id”)
u、 姓名=博士(“姓名”)
u、 电子邮件=dr(“电子邮件”)
u、 国家=dr(“国家”)
uList.Add(u)
结束时
. . . . . . .
返回乌利斯特
结束时
'类集合成员变量中的某处
_users=LoadUsers()
'然后您可以使用LINQ搜索信息
公共函数FindByCountry(ByVal country作为字符串)作为列表(用户)
返回_users.Where(函数(u)u.Country.Equals(Country,StringComparison.OrdinalIgnoreCase))
终点
这种方法的缺点是,您需要为每个字段使用
Find
函数。但是如果你可以传递一个函数本身呢。请参阅-您有
姓名、电子邮件、国家/地区
-所有字符串。这是你能做的

类客户端
子搜索字符串(ByVal searchOption字符串、ByVal searchValue作为字符串)
Dim f As Func(属于用户,布尔值)
如果searchOption=“Name”,则
f=函数(u作为用户)(u.Name.Equals(searchValue、Stringcomparison.OrdinalIgnoreCase))
ElseIf searchOption=“Country”则
f=函数(u作为用户)(u.Country.Equals(searchValue、Stringcomparison.OrdinalIgnoreCase))
ElseIf searchOption=“电子邮件”然后
f=函数(u作为用户)(u.Email.Equals(searchValue、Stringcomparison.OrdinalIgnoreCase))
其他的
. . . . 
如果结束
dataGrd.DataSource=myRepository.FindByString(f)
端接头
末级
'在您的存储库类中
公共子FindByString(ByVal f as Func(字符串的,布尔值))as List(用户的)
_users.Where(f).ToList()
端接头
'使用此选项搜索单个用户
作为用户的公共子FindByInteger(ByVal f作为Func(整型,布尔型))
_users.SingleOrDefault(f)
端接头

底线——放弃你所做的,使用现代高效的技术。以上只是其中的一对

首先,永远不要使用
ArrayList
。它是为了向后兼容而存在的,但没有任何用途。我可以简明扼要地回答-LINQ与
ArrayList
没有任何关系。使用generic
List(Of T)
和LINQ搜索其中的值。也不需要
字典
。这是老式的。我们使用了
字典
,因为它有

我明白了,您正在尝试创建表结构,但不需要这样做。首先,有
System.Data.DataTable
,可以在客户端查询

或者使用这种技术

公共类用户
作为整数的公共属性Id
作为字符串的公共属性名称
公共属性电子邮件作为字符串
作为字符串的公共财产国家
末级
私有函数LoadUsers()作为(用户的)列表
Dim uList作为新列表(用户)()
“这里有一些代码
而里德博士
Dim u作为新用户()
u、 Id=dr(“Id”)
u、 姓名=博士(“姓名”)
u、 电子邮件=dr(“电子邮件”)
u、 国家=dr(“国家”)
uList.Add(u)
结束时
. . . . . . .
返回乌利斯特
结束时
'类集合成员变量中的某处
_users=LoadUsers()
'然后您可以使用LINQ搜索信息
公共函数FindByCountry(ByVal country作为字符串)作为列表(用户)
返回_users.Where(函数(u)u.Country.Equals(Country,StringComparison.OrdinalIgnoreCase))
终点
这种方法的缺点是,您需要为每个字段使用
Find
函数。但是如果你可以传递一个函数本身呢。请参阅-您有
姓名、电子邮件、国家/地区
-所有字符串。这是你能做的

类客户端
子搜索字符串(ByVal searchOption字符串、ByVal searchValue作为字符串)
Dim f As Func(属于用户,布尔值)
如果searchOption=“Name”,则
f=函数(u作为用户)(u.Name.Equals(searchValue、Stringcomparison.OrdinalIgnoreCase))
ElseIf searchOption=“Country”则
f=函数(u作为用户)(u.Country.Equals(searchValue、Stringcomparison.OrdinalIgnoreCase))
ElseIf searchOption=“电子邮件”然后
f=函数(u作为用户)(u.Email.Equals(searchValue、Stringcomparison.OrdinalIgnoreCase))
其他的
. . . . 
如果结束
dataGrd.DataSource=myRepository.FindByString(f)
端接头
末级
'在您的存储库类中
公共子FindByString(ByVal f as Func,共个)