包含with语句的linq查询的Vb到c#转换

时间:2017-06-22 12:24:22

标签: c# vb.net linq

所以我一直在研究这个项目,将代码从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()`

3 个答案:

答案 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();