一千萬個為什麽

搜索

Linq到Datarow,選擇多個列作為區別?

基本上我正在嘗試將以下mssql查詢重現為LINQ

SELECT DISTINCT [TABLENAME], [COLUMNNAME] FROM [DATATABLE]

我最接近的是

Dim query = (From row As DataRow In ds.Tables("DATATABLE").Rows _
                  Select row("COLUMNNAME") ,row("TABLENAME").Distinct

當我這樣做時,我得到了錯誤

可以推斷出範圍變量名稱   僅來自簡單或合格的名稱   沒有爭論。

我有點期待它返回一個我可以叠代並為每個條目執行操作的集合。 也許是數據集合?

作為一個完整的LINQ newb,我不確定我錯過了什麽。 我嘗試過變種

Select new with { row("COLUMNNAME") ,row("TABLENAME")}

得到:

匿名類型成員名稱即可   僅從簡單或推斷推斷   沒有參數的限定名稱。

為了解決這個問題,我試過了

 Dim query = From r In ds.Tables("DATATABLE").AsEnumerable _
        Select New String(1) {r("TABLENAME"), r("COLUMNNAME")} Distinct

但它似乎沒有正確地做出獨特的事情。

此外,有沒有人知道任何好的書籍/資源,以流利?

最佳答案

您開始在數據表對象上使用LINQ,您對dt.AsEnumberable運行查詢,該查詢返回一個IEnumerable DataRow對象集合。

Dim query = From row As DataRow In ds.Tables("DATATABLE").AsEnumerable _
              Select row("COLUMNNAME") ,row("TABLENAME")

您可能想要說 row(“COLUMNNAME”)。ToString()等。查詢將最終成為具有2個字符串屬性的匿名類型的IEnumerable;那就是你要追求的?您可能需要指定屬性的名稱;我不認為編譯器會推斷它們。

Dim query = From row As DataRow In ds.Tables("DATATABLE").AsEnumerable _
              Select .ColumnName = row("COLUMNNAME"), .TableName = row("TABLENAME")

這假定在您使用ADO獲取此數據集的原始sql查詢中,您確保結果是不同的。

混淆的常見原因:

一個關鍵是 LINQ到SQL 和(通常稱為 Linq-to-object 活動) LINQ到數據集 是兩個非常不同的東西。在兩者中你都會看到LINQ被使用,所以它經常引起混亂。

LINQ到數據集

是:

1使用數據適配器和連接等,使您的數據表與您始終擁有的方式相同,最終得到傳統的數據表對象。然後,不像以前那樣叠代行,而是:

2對 dt.AsEnumerable 運行linq查詢,這是一個數據行對象的IEnumerable。

LINQ到數據集 is choosing to (A) NOT use LINQ到SQL but instead use traditional ADO.NET, but then (B) once you have your datatable, using LINQ(-to-object) to retrieve/arrange/filter the data in your datatables, rather than how we've been doing it for 6 years. I do this a lot. I love my regular ado sql (with the tools I've developed), but LINQ is great

LINQ到SQL

is a different beast, with vastly different things happening under the hood. In LINQ到SQL, you:

1使用Visual Studio中的工具定義與您的數據庫匹配的模式,該工具為您提供與模式匹配的簡單實體對象  2使用db Context 編寫linq查詢,並將這些實體作為結果返回。

在幕後,在運行時,.NET將這些LINQ查詢轉換為SQL並將它們發送到數據庫,然後將數據返回轉換為您在模式中定義的實體對象。

其他資源:

Well, that's quite a truncated summary. To further understand these two very separate things, check out:
LINQ到SQL
LINQ到數據集

一本關於LINQ的精彩書籍是 LINQ in Action ,我的Fabrice Marguerie,Steve Eichert和Jim Wooley(Manning) )。去實現它(夢想);去得到它(東西!正是你所追求的。很好。 LINQ並非曇花一現,值得一本書。在.NET中,有很多東西需要學習,但掌握LINQ的時間花費的時間很長。

轉載註明原文: Linq到Datarow,選擇多個列作為區別?