Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Vb.net Datatable -> if statement to check if the value exists then amend the table

Posted on 2014-02-05
3
Medium Priority
?
2,041 Views
Last Modified: 2014-02-05
Hi ALL,

Below if the code i have so far and I have 2 questions really....

1) i have an error "BC30311: Value of type 'System.Collections.Generic.IEnumerable(Of System.Data.DataRow)' cannot be converted to 'Boolean'." on row If scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext then


2) Can i do this with less code and make it quicker/neater?

I have commented the below code to show what i wanted it to do....

      
 	'Check to see if anyrows in HomeTeam contain a value
	 Dim count = scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("HomeTeam").ToString() = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)).Count()
'Find the count
if count = 0 then

'add row to the datatable as no results where found
scorestable.Rows.Add(StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText), div.selectSingleNode(".//td[@class='time']").InnerText.Trim().Substring(0, 2) , thescorestext)

else
'A matching result was found so now check to see if the Scores section of the result matches the value - thescorestext

If scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext then
'Yes it does match the score so we just need to update the column of the row with the correct time
Dim scoresRow() As Data.DataRow
'Make sure i have selected the correct team
scoresRow = scorestable.Select("HomeTeam = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)")
'Update the time row'
scoresRow(0)("Time") = div.selectSingleNode(".//td[@class='time']").InnerText.Trim().Substring(0, 2)

else

'The score does not match meaning i need to update both the score and the time

Dim scoresRow() As Data.DataRow
'Make sure i have selected the correct team
scoresRow = scorestable.Select("HomeTeam = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)")
'update score
scoresRow(0)("Score") = thescorestext
'Update time
scoresRow(0)("Time") = div.selectSingleNode(".//td[@class='time']").InnerText.Trim().Substring(0, 2)
end if

end if

Open in new window

0
Comment
Question by:runnerjp2005
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
3 Comments
 
LVL 64

Accepted Solution

by:
Fernando Soto earned 2000 total points
ID: 39835405
Hi runnerjp2005;

In the following If statement the test needs to return a Boolean type.

If scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext then

Open in new window

The Test
scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext

Open in new window

is missing a ")" at the end of the statement. But even if you put a ")" it returns a Collection of DataRows and NOT a Boolean. You need to change the statement so that it returns a Boolean something like the following.
scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString() = thescorestext).Count > 0

Open in new window

0
 

Author Comment

by:runnerjp2005
ID: 39835508
now i get  Identifier expected on scoresRow = scorestable.Select("HomeTeam = StringOutNumbers(div.selectSingleNode(".//td[@class='home']").InnerText)")
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 39835706
Try following


scorestable.Rows.Cast(Of DataRow)().Where(Function(n) n("Score").ToString())(0)("Score") = thescorestext

Another option is to use dataview

scorestable.DefaultView.RowFilter = "Score='" & thescorestext & "'"
if scorestable.DefaultView.Count > 0 Then
   'score found
else
   'not found
End If
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

598 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question