日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Linq下有一个非常实用的SelectMany方法,很多人却不会用

發(fā)布時間:2023/10/11 综合教程 101 老码农
生活随笔 收集整理的這篇文章主要介紹了 Linq下有一个非常实用的SelectMany方法,很多人却不会用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在平時開發(fā)中經(jīng)常會看到有些朋友或者同事在寫代碼時會充斥著各種for,foreach,這種程式代碼太多的話閱讀性特別差,而且還顯得特別累贅,其實(shí)在FCL中有很多幫助我們提高閱讀感的方法,而現(xiàn)實(shí)中很多人不會用或者說不知道,這篇我就跟大家聊一聊。

一:SelectMany

這個方法絕對是提高開發(fā)速度的一大利器,有太多的業(yè)務(wù)場景需要使用這個函數(shù),舉一個我實(shí)際應(yīng)用場景,商家按照年份和客戶類型預(yù)先設(shè)置一些標(biāo)簽,然后讓系統(tǒng)跑一下它的各自標(biāo)簽到底有多少人?

1. 定義Model

為了方便演示,這里做了一下簡化代碼,只有一個字典,key表示年份,value:就是該年份的多組標(biāo)簽。


public class EstimateModel
{
public int ShopID { get; set; } //key: 年份
public Dictionary<string, List<TagCrowdFilterModel>> YearCrowdFilterDict { get; set; }
} public class TagCrowdFilterModel
{
/// <summary>
/// 篩選條件
/// </summary>
public string CrowdFiter { get; set; } /// <summary>
/// 獲取人數(shù)
/// </summary>
public int TotalCustomerCount { get; set; }
}

為了更加清晰,我決定再填充一下數(shù)據(jù)

        public static void Main(string[] args)
{
var estimateModel = new EstimateModel()
{
ShopID = 1,
YearCrowdFilterDict = new Dictionary<string, List<TagCrowdFilterModel>>()
{
{
"17年",new List<TagCrowdFilterModel>()
{
new TagCrowdFilterModel(){ CrowdFiter="between 10 and 20" },
new TagCrowdFilterModel(){ CrowdFiter=" a<10 || a>30" },
}
},
{
"18年",new List<TagCrowdFilterModel>()
{
new TagCrowdFilterModel(){ CrowdFiter="between 100 and 200" },
new TagCrowdFilterModel(){ CrowdFiter=" a<100 || a>300" },
}
},
{
"19年",new List<TagCrowdFilterModel>()
{
new TagCrowdFilterModel(){ CrowdFiter="between 1000 and 2000" },
new TagCrowdFilterModel(){ CrowdFiter=" a<1000 || a>3000" },
}
}
}
};
} public static int GetCustomerID(string crowdfilter)
{
return BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0);
}

2. 實(shí)現(xiàn)需求

需求也很簡單,就是依次獲取 TagCrowdFilterModel 中的 CrowdFiter 字段再調(diào)用GetCustomerID方法把人數(shù)賦值給TotalCustomerCount即可,這么簡單的需求,如果讓你來搞定,你該怎么實(shí)現(xiàn)這個邏輯? 沒錯,很多人可能就是兩個foreach搞定。

        foreach (var year in estimateModel.YearCrowdFilterDict.Keys)
{
var yearCrowdFitlerList = estimateModel.YearCrowdFilterDict[year]; foreach (var crowdFitler in yearCrowdFitlerList)
{
crowdFitler.TotalCustomerCount = GetCustomerID(crowdFitler.CrowdFiter);
}
}

看似代碼也很清爽,但現(xiàn)實(shí)哪有這么好的事情,真實(shí)情況是年份上可能還要套上一個客戶類型,客戶類型之上再套一個商品,商品之上再套一個商家,這樣很深的層級你就需要多達(dá)3個foreach,4個foreach甚至5個foreach才能搞定,再放張圖給大家看看,是不是看著頭大...

總結(jié)

以上是生活随笔為你收集整理的Linq下有一个非常实用的SelectMany方法,很多人却不会用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。