我已经搜索了一段时间,发现了很多很好的答案,但是当我尝试模仿解决方案中的代码时,每个解决方案都会出错。
我将值传递给应该
的函数我的代码如下:
Dim xelement As XElement = xelement.Load(get_local_data_year_path() & "\" & "PAYMENT.xml")
Dim elements = From objdata In xelement.Elements("PAYMENT")
Select New With {
.id = Trim(objdata.Element("id").Value),
.Date = objdata.Element("paymentdate").Value,
.account_id = objdata.Element("account_id").Value
}
If straccount_id.Length > 0 Then
elements.Where(Function(P As PAYMENT) P.account_id.Equals(straccount_id))
End If
Dim result = (elements).ToList
我遇到的问题是where子句,因为它产生错误
Overload resolution failed because no accessible 'Where' can be called with these arguments:
Extension method 'Public Function Where(predicate As System.Func(Of <anonymous type>, Integer, Boolean)) As System.Collections.Generic.IEnumerable(Of <anonymous type>)' defined in 'System.Linq.Enumerable': Nested function does not have a signature that is compatible with delegate 'System.Func(Of <anonymous type>, Integer, Boolean)'.
Extension method 'Public Function Where(predicate As System.Func(Of <anonymous type>, Boolean)) As System.Collections.Generic.IEnumerable(Of <anonymous type>)' defined in 'System.Linq.Enumerable'.
我想我不确定当它是XML文件时如何声明PAYMENT以及为什么该行根本不起作用。
任何帮助将不胜感激。如果可能的话,VB.NET示例会被优先使用。
答案 0 :(得分:0)
您的代码有点令人困惑(straccount_id
设置在哪里?),但以下行应该列出与straccount_id
匹配的匿名类型(您在第一个查询中创建的内容) :
Dim straccount_id As String = "123456"
Dim results = elements.Where(Function(e) e.account_id.Contains(straccount_id)).ToList()
您还可以通过在查询中使用Where
子句并将其转换为列表来完成相同的操作:
Dim elements = (From objdata In xelement.Elements("PAYMENT")
Where objdata.Element("account_id").Value.Contains(straccount_id)
Select New With {
.id = Trim(objdata.Element("id").Value),
.Date = objdata.Element("paymentdate").Value,
.account_id = objdata.Element("account_id").Value
}).ToList()
修改强>
您可以在一个.Where
中组合多个条件。例如,如果您希望获得ID为&#34; 1&#34;和#34; 123456&#34;的account_id (琐碎的例子),你会这样做:
results = elements.Where(Function(e) e.account_id.Contains(straccount_id) And e.id = "1").ToList()
我不确定user had entered a value in an IF statement
的含义,但您可以接受输入并在上面的行中使用它们。密钥(来自我在VS2012中的测试)似乎是您声明Function(e)
一次,并在其后面添加标准,并根据需要加入And
或Or
。