LINQ查询的正确语法仅选择某些列

时间:2011-09-13 18:39:59

标签: .net vb.net linq

这个的正确语法是什么:

Dim qry As <??> = From f In dirInfo.GetFiles("*.QBW") Select File = f.FullName, Include = True
Dim dt As DataTable = qry.CopyToDataTable()

我试过“IEnumerable(Of DataRow)”但是没有用。在运行时它说:

  

无法投射类型的对象   'WhereSelectArrayIterator 2[System.IO.FileInfo,VB$AnonymousType_0 2 [System.String,System.Boolean]]'   输入   'System.Collections.Generic.IEnumerable`1 [的System.Data.DataRow]'。

5 个答案:

答案 0 :(得分:2)

这是一个用c#

编写的小解决方案

使用select(x =&gt; new {})...并将其输入为IEnumerable

private static void Main(string[] args)
{
    var dirInfo = new DirectoryInfo(@"c:\windows\temp\");
    IEnumerable<dynamic> qry = dirInfo.GetFiles("*.txt").Select(x => new { x.FullName, x.Extension });

    foreach (var item in qry)
    {
        Console.WriteLine(string.Concat(item.Extension, " -> ", item.FullName));
    }
    Console.ReadKey();
}

编辑,这是一个vb版本

Private Shared Sub Main(args As String())
    Dim dirInfo = New DirectoryInfo("c:\windows\temp\")
    Dim qry As IEnumerable(Of dynamic) = dirInfo.GetFiles("*.txt").[Select](Function(x) New From { _
        x.FullName, _
        x.Extension _
    })

    For Each item As var In qry
        Console.WriteLine(String.Concat(item.Extension, " -> ", item.FullName))
    Next
    Console.ReadKey()
End Sub

更新2

现在正如问题中明确指出的那样,打字不清楚,这可以通过使用IEnumerable来解决。但是,这不是最佳解决方案,相反,我建议构建一个对象并将数据存储在那里。但对于次要应用,我认为它会这样做。

答案 1 :(得分:2)

我尝试在大多数情况下应用Linq,所以我对它更熟悉,但这似乎不是正确的问题。所以回到过去的真实方式...... Per Everyone的帮助,我到达时,最好的办法是:

  Dim dt As New DataTable()
  dt.Columns.Add("File", GetType(String))
  dt.Columns.Add("Include", GetType(Boolean))
  For Each f as FileInfo In dirInfo.GetFiles("*.QBW")
    dt.Rows.Add(f.FullName, True)
  Next

答案 2 :(得分:1)

Dim qry = dirInfo.GetFiles("*.QBW").[Select](Function(f) New With { _
    f.FullName, _
    .Include = True _
})

答案 3 :(得分:1)

或者只需转动Option Infer On,不要使用任何内容,例如

Dim qry = From f In dirInfo.GetFiles("*.QBW") Select File = f.FullName, Include = True

请查看here进行更深入的讨论。

但是,要使用CopyToDataTable(),类型需要DataRow派生类型 您打算如何使用DataTable,.net中有很多地方不需要DataTable?

答案 4 :(得分:-1)

解决方案在您粘贴的错误消息中...您需要IEnumerable(Of FileInfo)