所以我一直在研究这个项目,将代码从vb.net转换为c#.net,但我从未使用过vb。代码有很多Linq语句,其中一些包含一个'with'语句,我知道它只是vb的本地语句。我已经完成了研究,并找到了如何将常规语句转换为c#但不知道如何将这类内容转换为linq查询。任何帮助,将不胜感激。这是我正在尝试转换的声明
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 :(得分:1)
因此,您希望将DataTable
转换为List<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();
答案 1 :(得分:0)
正如mjwills在他的链接中已经指出的那样,With
建议使用匿名类型而不是现有类型。在C#中,我想你知道如何做到这一点。
答案 2 :(得分:0)
VB.Net New ClassName With { .Field = Value, ... }
构造在构造期间是字段初始化。在C#中它是new ClassName { Field = Value, ... }
。因此,您的代码可能会按如下方式进行:
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();