【问题标题】:Reading data from LINQ query从 LINQ 查询中读取数据
【发布时间】:2017-11-27 13:06:05
【问题描述】:

我是 LINQ 查询和编写 SSIS 脚本任务以从两个数据表中读取数据的新手。 我创建了以下查询,我希望将输出作为表格通过电子邮件发送。电子邮件的正文将作为输出。

我可以看到结果。但不知道如何使用这些数据(新到 linq)。 这是我的代码:-

    Dim Filename As String
    Dim Filepath As String
    Dim i As Integer


    Filename = "TM_xxx_DAILY_*" + Dts.Variables("User::VLoaddt").Value.ToString + "_*.txt"


    Filepath = Dts.Variables("User::vSrcFolder").Value.ToString

    Dim di As DirectoryInfo = New DirectoryInfo(Filepath)
    Dim fi As FileInfo() = di.GetFiles(Filename)

    Dim DestTab As DataTable
    DestTab = New DataTable("DestinationTable")

    Dim column As DataColumn = New DataColumn("Dest")
    column.DataType = System.Type.GetType("System.String")


    DestTab.Columns.Add(column)

    DestTab.Rows.Add("TM_xxx_ONLINE")
    DestTab.Rows.Add("TM_xxx_RETAIL")
    DestTab.Rows.Add("TM_xxx_TELESALES")
    DestTab.Rows.Add("TM_xxx_DAILY_DEVICE")

    Dim SrcTab As DataTable
    SrcTab = New DataTable("SourceTable")

    Dim column1 As DataColumn = New DataColumn("Source")
    column1.DataType = System.Type.GetType("System.String")

    Dim column2 As DataColumn = New DataColumn("FileExists")
    column2.DataType = System.Type.GetType("System.String")

    SrcTab.Columns.Add(column1)
    SrcTab.Columns.Add(column2)


    For i = 0 To fi.Length - 1
        SrcTab.Rows.Add(Left(fi.GetValue(i).ToString, Len(fi.GetValue(i).ToString) - 20), "Exists")

    Next

    Dim query =
    From a In DestTab
    Group Join b In SrcTab
        On a.Field(Of String)("dest") Equals b.Field(Of String)("Source")
        Into Group
    Let b = Group.FirstOrDefault
    Select dest = a.Field(Of String)("dest"), FileExists = If(b Is Nothing, "Missing", b.Field(Of String)("FileExists"))

最大的挑战,我无法理解如何在“Dim 查询”中使用变量“查询”。而网络中的示例并能够将其用作数据行、复制到数据表等。我只能看到 tostring、equals 和类似的东西。

我的目标是读取文件夹中的文件并将其与“Destinationtable”连接并找到丢失的文件。

下面写的代码是select语句后面的代码

错误截图

【问题讨论】:

  • LINQ 查询返回IEnumerable(Of T),其中T 类型取决于查询的具体情况。一般来说,您使用For Each 循环访问IEnumerable 的内容。
  • @jmcilhinney 谢谢。当我尝试使用类似'for each line in query console.writeline (line) next'之类的代码时,我收到错误提示从对象隐式转换为不可计数,这是正确的。所以我在这里错过了什么吗?
  • 编辑您的问题并向我们展示产生错误的实际代码。另外,我建议您复制并粘贴错误消息。
  • 添加了错误屏幕抓取

标签: sql-server vb.net linq ssis script-task


【解决方案1】:

我认为你应该使用

For each line in query.ToList()

    Dim drRow as DataRow
    drRow = MT.NewRow
    drRow("Filename") = line.Item(0)
    MT.Rows.Add(drRow)

Next

而不是

For each line in query
    MT.Rows.Add(query)
Next

【讨论】:

  • 我想知道的一件事是每一行的“行”的数据类型应该是什么。
  • 在这种情况下你可以使用Object
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多