亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C# 使用Linq遞歸查詢數據庫遇到的問題及解決方法

2019-11-17 03:26:37
字體:
來源:轉載
供稿:網友


User表通常是我們在寫“XX管理系統”項目時必須要用到的,有的情況下人員的分類屬于樹形結構,就是除了最高層和最低層,中間層都有相對的父和子,設計數據庫的時候,我們通常會加一個parent_id這樣的字段。這樣我們就可以通過當前用戶的user_id查詢出他的直接下屬有哪些,或者通過parent_id查詢出他的直接上司是誰。

但是當我們想通過user_id去查詢出其所有下屬的時候,就不是能用一條簡單的sql能實現的了。如果項目要是.Net Framework3.5以下的,就是沒有Linq的時候,通常會在數據庫里寫一個函數,然后在寫sql的時候直接調用函數就能得到一個篩選出來的結果集。如果是Linq呢?我想應該就是要寫一個靜態方法了,正好自己遇到了一個這樣的問題,也是剛接觸Linq,所以試著寫了一下。

不過無論是在數據庫中寫函數還是在項目中寫一個靜態方法,我想都是要用到遞歸去實現的。

我的思路就是傳入當前的user_id然后返回它的所有下屬的結果集。最后在這個結果集上去根據條件查詢。但是,在寫這個方法的過程中還是遇到了幾個問題:

1、如何將查詢出來的結果集var類型,轉換成List<T>類型

最開始我是這樣去寫的
/*大錯特錯*/
var list = from ....... where.... select...;
.....
return list.ToList<T>();
 
現在看看我還是挺有創造力的哈,居然能寫出這么個東西。

首先不說list.ToList<T>();本身就畫紅線,為什么我要在最后 return 的時候才去ToList()呢?原因是我知道var 可以用“+=”運算符。這樣遞歸的時候將深一層的返回值直接+到一起,用起來方便一些。

啊~真是大錯特錯了,首先,按照我的思路,深一層返回的值已經是ToList類型了,所以不能再用+=運算符了.其次,好吧,我承認,我還是沒有太了解var是個什么東西。其實在程序運行之后,list就會有一個明確的類型,是系統去自動判定出來的。var只是使我們編程的時候更方便一些,有點像程序蜜糖(忘記是從哪聽來的了),也就是說系統應該能識別出list是一個T類型對象的集合,而我這么寫就有點畫蛇添足的意味了。

正解:
var list = (from ....... where.... select...).ToList();
.....
return list;

這樣,list 就會變成我想要的List<T>類型了,因為函數的返回值就是這個類型,所以正是我想要的。

2、提示報錯:Collection was modified; enumeration Operation may not execute.

這個錯誤的原因是因為用foreach遍歷的時候,對Collection(這里的temp)這個數據集進行了Add/Remove操作。這樣就有可能在未遍歷到最后的時候,就把這個Collection給修改了,隨之就報錯了。解決辦法有說用for代替foreach的,但是我還是覺得foreach要好些,所以創建了一個Collection這個結果集副本,然后一個用作遍歷,一個用作Add/Remove操作,當然,返回的是用后者。

注意創建副本的時候一定新new一個對象,而不是直接聲明之后賦值,否則跟沒寫一樣。
List<T> tmpList = list; //錯誤

List<T> tmpList = new List<T>(list);//正確
 
最后完整的代碼為:
        contextdata ctdt = new contextdata();
        public static List<db_userinfo> findallchildren(int parentid)
        {
            var list = (from c in ctdt.db_userinfo
                        where c.parent_id == parentid
                        select c).ToList();
            List<db_userinfo> tmpList = new List<db_userinfo>(list);
            foreach (db_userinfo single in temp)
            {
                List<db_userinfo> tmpChildren = findallchildren(single.user_id);
                if (tmpChildren.Count != 0)
                {
                    list.AddRange(tmpChildren);
                }
            }
            return list;
        }
 
這樣,在頁面的后臺代碼.cs文件中,就可以直接把這個方法的返回值作為條件查詢中基礎數據集。如
var result = from c in findallchildren(userid)  where.....select....;
 
應該還有更好的方法,希望比較懂的朋友能多傳授一下,歡迎蓋樓!~

1、Live your own, then enough. 2、Enjoy life, enjoy work. 新浪微博:http://weibo.com/zhouhongyu1989 歡迎圍觀~! 友情鏈接:http://zhouhongyu1989.blog.51cto.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩毛片中文字幕| 亚洲欧美精品中文字幕在线| 国产精品久久久| 国产一区二区黑人欧美xxxx| 97久久久免费福利网址| 久久国产精品久久久久久久久久| 国产精品白嫩初高中害羞小美女| 91chinesevideo永久地址| 亚洲字幕一区二区| 国产精品69久久| 欧美二区在线播放| 国产美女精品免费电影| 成人妇女淫片aaaa视频| 国产在线视频不卡| 人九九综合九九宗合| 欧美在线不卡区| 国产自产女人91一区在线观看| 精品国产依人香蕉在线精品| 91成品人片a无限观看| 欧美激情一级欧美精品| 日韩欧美亚洲综合| 少妇激情综合网| 国产日韩欧美一二三区| 日韩成人在线电影网| 欧美日韩国产二区| 久久久精品在线观看| 欧美性理论片在线观看片免费| 久久久最新网址| 国产91精品不卡视频| 国产精品久久久亚洲| 久久91亚洲精品中文字幕奶水| 久久视频国产精品免费视频在线| 久久国内精品一国内精品| 国产成人精品免高潮费视频| 黑丝美女久久久| 亚洲精品电影久久久| 日韩av在线电影网| 韩国美女主播一区| 国产精品久久一区| 中文字幕日韩专区| 91精品国产高清自在线| 亚洲成人久久久久| 91久久久国产精品| 日本免费一区二区三区视频观看| 欧美一级黑人aaaaaaa做受| 色偷偷av亚洲男人的天堂| 在线精品播放av| 久久久久久久国产精品视频| 国产精品盗摄久久久| 欧美一级电影免费在线观看| 午夜精品久久久久久久久久久久| 中文字幕av一区| 欧美又大又硬又粗bbbbb| 日韩精品在线免费观看视频| 日产精品99久久久久久| 国产一区视频在线| 欧美一区二区三区……| 日韩欧美亚洲一二三区| 国产精品久久久久7777婷婷| 国产成人免费91av在线| 久久最新资源网| 亚洲欧美日本精品| 4438全国成人免费| 日韩少妇与小伙激情| 国产精品三级久久久久久电影| 久久av红桃一区二区小说| 欧美精品亚州精品| 久久久免费精品视频| 国产日产久久高清欧美一区| 91在线观看免费| 国产精品吹潮在线观看| 国产精品一区二区性色av| 欧美日韩午夜视频在线观看| 日韩经典中文字幕在线观看| 日韩av在线免播放器| 国产精品久久久久久久av电影| 亚洲香蕉伊综合在人在线视看| 国产精品视频色| 国产成人精品综合久久久| 国产成人啪精品视频免费网| 欧美风情在线观看| 成人黄色网免费| 97久久久久久| 国产日本欧美一区二区三区| 亚洲国产精品va在看黑人| 久久亚洲精品小早川怜子66| 精品国产老师黑色丝袜高跟鞋| 亚洲图片欧洲图片av| 91色在线观看| 日韩亚洲一区二区| 中文字幕不卡av| 日韩亚洲欧美中文高清在线| 91中文字幕一区| 国产亚洲激情视频在线| 亚洲人成在线播放| 亚洲天堂一区二区三区| 91理论片午午论夜理片久久| 日韩美女视频中文字幕| 456国产精品| 日韩欧美国产免费播放| 国产综合视频在线观看| 欧美激情在线视频二区| 亚洲欧美变态国产另类| 1769国内精品视频在线播放| 亚洲国产高清高潮精品美女| 91麻豆国产精品| 社区色欧美激情 | 亚洲国产成人久久| 日韩人体视频一二区| 国产69精品久久久久久| 91精品国产综合久久香蕉的用户体验| 国产精品偷伦免费视频观看的| 在线观看国产精品91| 欧美亚洲伦理www| 亚洲免费中文字幕| 精品久久久一区| 亚洲一区二区三区四区视频| 日韩av一区二区在线| 欧美与黑人午夜性猛交久久久| 欧美精品xxx| 91免费综合在线| 久久999免费视频| 亚洲国产婷婷香蕉久久久久久| 亚洲电影免费观看| 国产日产欧美a一级在线| 在线性视频日韩欧美| 亚洲人成电影网站色xx| 91精品国产电影| 超碰精品一区二区三区乱码| 久久九九国产精品怡红院| 中文字幕亚洲在线| 欧美丝袜第一区| 精品国内自产拍在线观看| 欧美专区日韩视频| 久久人人爽人人爽爽久久| 久久久www成人免费精品张筱雨| 久久久天堂国产精品女人| 久久久久北条麻妃免费看| 国产一区二区香蕉| 日本三级韩国三级久久| 国产日韩欧美中文在线播放| 日韩国产中文字幕| 欧美尤物巨大精品爽| 日韩高清av在线| 亚洲电影免费观看高清完整版在线| 亚洲欧美日韩天堂一区二区| 中文字幕欧美日韩va免费视频| 日韩欧亚中文在线| 日本高清视频精品| 高跟丝袜欧美一区| 国产福利视频一区二区| 国产欧美最新羞羞视频在线观看| 色婷婷久久av| 成人免费视频a| 久久精品国亚洲| 亚洲va电影大全| 91在线中文字幕| 国产日韩欧美黄色| 亚洲国产成人久久综合| 日本精品一区二区三区在线| 欧美国产日本高清在线| 日本亚洲精品在线观看| 97欧美精品一区二区三区| 国产91精品在线播放|