C# 创建lambda表达式以查询数据

C# 创建lambda表达式以查询数据,c#,json,lambda,C#,Json,Lambda,为了反序列化json数据,我基于json数据创建了一些类。 我想使用lambda表达式访问sku和sku名称,但我无法这样做 因此,我设法获得了sku名称,但如何获得sku属性?我还想获取sku名称属性和关联的sku属性。sku名称和sku属于同一类-sku类。谢谢你的时间 var productSku = skuIdName.BodyText.products.vendors .SelectMany(x => x.listings .Select

为了反序列化json数据,我基于json数据创建了一些类。 我想使用lambda表达式访问sku和sku名称,但我无法这样做

因此,我设法获得了sku名称,但如何获得sku属性?我还想获取sku名称属性和关联的sku属性。sku名称和sku属于同一类-sku类。谢谢你的时间

    var productSku = skuIdName.BodyText.products.vendors
         .SelectMany(x => x.listings
        .SelectMany(l => l.skus
        .SelectMany(f => f.skuName

         ))).ToArray();
我无法获取所有sku和sdkuName(使用lambda)并将其放入列表或字典中,使用sku值作为键,skuName作为值,因为我稍后会将这些值存储在数据库中。 例如 “sku”:“SK8772”, “skuName”:“国内和国际呼叫计划”, “sku”:“SK8265”, “skuName”:“音频会议”

JSON数据:
{
“结果”:“成功”,
“正文”:
{
“产品”:
{
“totalProducts”:510,
“recordsPerPage”:10,
“页码”:1,
“总页数”:51页,
“供应商”:[
{
“vendorId”:“397”,
“vendorName”:“Microsoft”,
“清单”:[
{
“listingName”:“Office 365企业版”,
“SKU”:[
{
“sku”:“SK10228”,
“skuName”:“不带音频会议的Microsoft 365 E5”,
“说明”:“待定”,
“zeroValueSku”:“t”,
“制造商零件号”:“db5e0b1c9cc3459c9d08c61993959fd3”,
“条款”:“4090153”,
“供应商手册”:“db5e0b1c-9cc3-459c-9d08-c61993959fd3”,
“billingType”:“每月”,
“产品类型”:“SaaS”,
“qtyMin”:“1”,
“qtyMax”:“,
“插件”:[
{
“sku”:“SK8265”,
“skuName”:“音频会议”,
“说明”:“对于需要使用户能够拨入号码加入Skype会议或拨出号码将参与者带到会议中的企业。购买此产品有基本的先决条件。”,
“zeroValueSku”:“t”,
“qtyMin”:“1”,
“qtyMax”:“,
“供应商手册”:“c94271d8-b431-4a25-a3c5-a57737a1c909”,
“制造商零件号”:“c94271d8b4314a25a3c5a57737a1c909”,
“第条”:“3873033”
},
{
“sku”:“SK8772”,
“skuName”:“国内和国际呼叫计划”,
“说明”:“对于需要使在线用户能够通过公共交换电话网(PSTN)拨打或接收国内和国际电话的企业。购买此产品需要基本先决条件。”,
“zeroValueSku”:“t”,
“qtyMin”:“1”,
“qtyMax”:“,
“卖方PID”:“ded34535-507f-4246-8370-f9180318c537”,
“制造商零件号”:“DED3455070F42468370F9180318C537”,
“第条”:“3968760”
},
}
]
}
]
}
]
}
]
}
},
“钥匙”:3298012
}
公共类插件
{
[Newtonsoft.Json.JsonProperty(PropertyName=“id”)]
公共字符串Id{get;set;}
公共字符串sku{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串zeroValueSku{get;set;}
公共字符串qtyMin{get;set;}
公共字符串qtyMax{get;set;}
公共字符串vendorMapId{get;set;}
公共字符串manufacturerPartNumber{get;set;}
公共字符串项目{get;set;}
公共重写字符串ToString()
{
返回JsonConvert.SerializeObject(this);
}
}
公共类Sku
{
公共字符串sku{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串zeroValueSku{get;set;}
公共字符串manufacturerPartNumber{get;set;}
公共字符串项目{get;set;}
公共字符串vendorMapId{get;set;}
公共字符串billingType{get;set;}
公共字符串productType{get;set;}
公共字符串qtyMin{get;set;}
公共字符串qtyMax{get;set;}
公共列表加载项{get;set;}
公共列表datacenterLocations{get;set;}
公共列表添加{get;set;}
}
公共类插件2
{
公共字符串sku{get;set;}
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共字符串zeroValueSku{get;set;}
公共字符串qtyMin{get;set;}
公共字符串qtyMax{get;set;}
公共字符串manufacturerPartNumber{get;set;}
公共字符串项目{get;set;}
公共列表sk{get;set;}
}
公共类列表
{
公共字符串listingName{get;set;}
公共列表SKU{get;set;}
公共列表加载项{get;set;}
//新的
//公共列表addon2s{get;set;}
}
公共类供应商
{
公共字符串vendorId{get;set;}
公共字符串vendorName{get;set;}//microsoft
公共列表列表{get;set;}
//公共列表SKU{get;set;}
}
公共类产品
{
公共整数totalProducts{get;set;}
public int recordsPerPage{get;set;}
公共整型页{get;set;}
公共整型totalPages{get;set;}
公共列表供应商{get;set;}
}
公共类正文
{
公共产品产品{get;set;}
}
公共类根对象
{
公共字符串结果{get;set;}
公共BodyText BodyText{get;set;}
公共int密钥{get;set;}
}
}
RootObject skuIdName=JsonConvert.DeserializeObject(jsonStorageProducts);

添加lambda表达式可能有助于获取所需的值。下面是获取SKU列表的示例

var root = new RootObject();
var skus = new List<Sku>();
root.BodyText.products.vendors.ForEach(vendor =>
        vendor.listings.ForEach(listing => listing.skus.ForEach(sku => skus.Add(sku))));
var root=new RootObject();
var skus=新列表();
root.BodyText.products.vendors.ForEach(vendor=>
vendor.listings.ForEach(listing=>listing.skus.ForEach(sku=>skus.Add(sku));
var root = new RootObject();
var skus = new List<Sku>();
root.BodyText.products.vendors.ForEach(vendor =>
        vendor.listings.ForEach(listing => listing.skus.ForEach(sku => skus.Add(sku))));
var nameIdDict = new Dictionary<string, string>();

skuIdName.BodyText.products.vendors.ForEach(v => 
{
    v.Listings.ForEach(listing => 
    {
        listing.skus.ForEach(s => 
        {
            nameIdDict.Add(s.sku, s.skuName);
            s.addOns.ForEach(a => 
            {
                nameIdDict.Add(a.sku, a.skuName);
            });
            s.add.ForEach(a => 
            {
                nameIdDict.Add(a.sku, a.skuName);
            });
        });
        listing.addOns.ForEach(a => 
        {
            nameIdDict.Add(a.sku, a.skuName);
        });
    });
});
void Main()
{
    string jsonStorageProducts = @"
{
   ""Result"": ""Success"",
   ""BodyText"": 
  {
  ""products"": 
{
  ""totalProducts"": 510,
  ""recordsPerPage"": 10,
  ""page"": 1,
  ""totalPages"": 51,
  ""vendors"": [
    {
      ""vendorId"": ""397"",
      ""vendorName"": ""Microsoft"",
      ""listings"": [
        {
          ""listingName"": ""Office 365 Enterprise"",
          ""skus"": [
            {
              ""sku"": ""SK10228"",
              ""skuName"": ""Microsoft 365 E5 without Audio Conferencing"",
              ""description"": ""Pending"",
              ""zeroValueSku"": ""t"",
              ""manufacturerPartNumber"": ""db5e0b1c9cc3459c9d08c61993959fd3"",
              ""article"": ""4090153"",
              ""vendorMapId"": ""db5e0b1c-9cc3-459c-9d08-c61993959fd3"",
              ""billingType"": ""Monthly"",
              ""productType"": ""SaaS"",
              ""qtyMin"": ""1"",
              ""qtyMax"": """",
              ""addOns"": [
                {
                  ""sku"": ""SK8265"",
                  ""skuName"": ""Audio Conferencing"",
                  ""description"": ""For businesses that need to enable users to dial-in a number to join Skype meetings, or dial-out to bring participants into the meeting. There are base pre-requisites required to purchase this offering."",
                  ""zeroValueSku"": ""t"",
                  ""qtyMin"": ""1"",
                  ""qtyMax"": """",
                  ""vendorMapId"": ""c94271d8-b431-4a25-a3c5-a57737a1c909"",
                  ""manufacturerPartNumber"": ""c94271d8b4314a25a3c5a57737a1c909"",
                  ""article"": ""3873033""
                },
                {
                  ""sku"": ""SK8772"",
                  ""skuName"": ""Domestic and International Calling Plan"",
                  ""description"": ""For Businesses that need to enable online users to place or receive Domestic and International calls through the Public Switched Telephone Network (PSTN). There are base pre-requisites required to purchase this offering."",
                  ""zeroValueSku"": ""t"",
                  ""qtyMin"": ""1"",
                  ""qtyMax"": """",
                  ""vendorMapId"": ""ded34535-507f-4246-8370-f9180318c537"",
                  ""manufacturerPartNumber"": ""ded34535507f42468370f9180318c537"",
                  ""article"": ""3968760""
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
},
  ""Key"": 3298012
}
";
    RootObject skuIdName = JsonConvert.DeserializeObject<RootObject>(jsonStorageProducts);
    var productSku = skuIdName.BodyText.products.vendors
     .SelectMany(x =>x.listings
     .SelectMany(l => l.skus
     .SelectMany(s => s.addOns
     .Select(o => new { 
        SKU = o.sku, 
        Name = o.skuName }))));

    foreach (var sku in productSku)
    {
        Console.WriteLine($"SKU: {sku.SKU}, Name: {sku.Name}");
    }
}


public class AddOn
{
    [Newtonsoft.Json.JsonProperty(PropertyName = "id")]
    public string Id { get; set; }
    public string sku { get; set; }
    public string skuName { get; set; }
    public string description { get; set; }
    public string zeroValueSku { get; set; }
    public string qtyMin { get; set; }
    public string qtyMax { get; set; }
    public string vendorMapId { get; set; }
    public string manufacturerPartNumber { get; set; }
    public string article { get; set; }
    public override string ToString()
    {
        return JsonConvert.SerializeObject(this);
    }
}

public class Sku
{
    public string sku { get; set; }
    public string skuName { get; set; }
    public string description { get; set; }
    public string zeroValueSku { get; set; }
    public string manufacturerPartNumber { get; set; }
    public string article { get; set; }
    public string vendorMapId { get; set; }
    public string billingType { get; set; }
    public string productType { get; set; }
    public string qtyMin { get; set; }
    public string qtyMax { get; set; }
    public List<AddOn> addOns { get; set; }
    public List<string> datacenterLocations { get; set; }
    public List<AddOn2> add { get; set; }
}

public class AddOn2
{
    public string sku { get; set; }
    public string skuName { get; set; }
    public string description { get; set; }
    public string zeroValueSku { get; set; }
    public string qtyMin { get; set; }
    public string qtyMax { get; set; }
    public string manufacturerPartNumber { get; set; }
    public string article { get; set; }

    public List<Sku> sk { get; set; }
}

public class Listing
{
    public string listingName { get; set; }
    public List<Sku> skus { get; set; }
    public List<AddOn2> addOns { get; set; }

    //new
    //public List<AddOn2> addon2s { get; set; }
}

public class Vendor
{
    public string vendorId { get; set; }
    public string vendorName { get; set; }//microsoft
    public List<Listing> listings { get; set; }

    // public List<Sku> skus { get; set; }
}

public class Products
{
    public int totalProducts { get; set; }
    public int recordsPerPage { get; set; }
    public int page { get; set; }
    public int totalPages { get; set; }
    public List<Vendor> vendors { get; set; }
}

public class BodyText
{
    public Products products { get; set; }
}

public class RootObject
{
    public string Result { get; set; }
    public BodyText BodyText { get; set; }
    public int Key { get; set; }
}
SKU: SK8265, Name: Audio Conferencing
SKU: SK8772, Name: Domestic and International Calling Plan