2017-06-22 50 views
0

所以我一直在研究這個項目,將代碼從vb.net轉換爲c#.net,但我從來沒有使用過vb。該代碼有許多Linq語句,其中一些包含一個'with'語句,我知道它僅適用於vb。我已經完成了研究,並發現如何將常規語句轉換爲c#,但不知道如何將這類東西包含到linq查詢中。任何幫助,將不勝感激。下面是我想轉換Vb轉換爲包含一條語句的linq查詢的c#轉換

Dim query = (From k In dt Select New ProductDecode With { 
    .CompanyCode = k.Field(Of Decimal)("CompanyCode"), 
    .ProductType = k.Field(Of String)("ProductType"), 
    .Product = k.Field(Of String)("Product"), 
    .ProductDescription = k.Field(Of String)("ProductDescription")}).ToList()` 
+0

https://stackoverflow.com/questions/528610/what-does-the-new-with-syntax-do-in-vb-linq可能是有趣的。 – mjwills

回答

0

正如mjwills已經指出了他的鏈接的聲明中,With建議一個匿名類型,而不是現有的。在C#中,我認爲你知道如何做到這一點。

0

VB.Net New ClassName With { .Field = Value, ... }構造是施工期間的現場初始化。在C#中它是new ClassName { Field = Value, ... }。所以,你的代碼可以conveted如下:

var query = (from k in dt select new ProductDecode { 
    CompanyCode = k.Field<decimal>("CompanyCode"), 
    ProductType = k.Field<string>("ProductType"), 
    Product = k.Field<string>("Product"), 
    ProductDescription = k.Field<string>("ProductDescription") 
}).ToList(); 
+0

謝謝,我花了很多錯誤,我以前已經走了,但現在我得到無效的表達術語錯誤的小數和字符串。我甚至嘗試使用它們作爲一個演員類型,但沒有任何工作 – zmaneval

+0

哦,'字段()'是一種擴展方法,所以我應該使用圓括號代替括號。請參閱最新的答案。 –

1

所以,你想一個DataTableList<ProductDecode>轉換:

var query = from row in dt.AsEnumerable() 
      select new ProductDecode 
      { 
       CompanyCode = row.Field<decimal>("ProductType"), 
       ProductType = row.Field<string>("ProductType"), 
       Product = row.Field<string>("Product"), 
       ProductDescription = row.Field<string>("ProductDescription"), 
      }; 
var list = query.ToList(); 

或僅與方法的語法(在C#中比在VB.NET更好):

var list = dt.AsEnumerable() 
    .Select(row => new ProductDecode 
    { 
     CompanyCode = row.Field<decimal>("ProductType"), 
     ProductType = row.Field<string>("ProductType"), 
     Product = row.Field<string>("Product"), 
     ProductDescription = row.Field<string>("ProductDescription"), 
    }).ToList();