C# in查詢


一、前言

  在做項目中,我們會經常使用到 in 查詢語句。那么如果我們用 EF 和 Linq 怎么寫?接下來看代碼

二、實例

  我使用的是區域查詢的例子,基本的 sql 語句如下:

SELECT * FROM Directories_AdministrativeDivision WHERE id IN ('5201','520102','520103','520111','520112','520113')

  查詢效果展示:

        

如果是 EF 查詢: 

  我們要將 in 的數據封裝為 list ,按我這的個例子的話,我是通過遞歸調用的方法,獲取當 id=5201 下的所有區域。遞歸調用的方法如下。

//定義 set 列表 
private HashSet<string> ids = new HashSet<string>();

/// <summary>
        /// 遞歸獲取區域id
        /// </summary>
        /// <param name="adId">用戶的屬地</param>
        public void getAdId(string adId)
        {
            ids.Add(adId);
            var ad2 = _administrativeDivisionRepository.GetAll().Where(x => x.ParentId == adId).ToList();
            foreach (AdministrativeDivision a in ad2)
            {
                ids.Add(a.Id);
                getAdId(a.Id);
            }
        }

 

  EF 的 in 查詢的代碼如下:

public void SeachAdministrativeDivision() {
            var ad = _administrativeDivisionRepository
                .GetAll()
                .Where(x => ids.Contains(x.Id));//這里就是 In 查詢
        }

 

如果是 Linq 的查詢:

  我們需要將獲取的 list 變為 (‘xx’,‘xxx’)的樣式,因為 Linq 查詢和 SQL 語句是非常相似的。轉化代碼如下:

       string[] array = ids.ToArray();
            
            string str = "(";
            for (int i = 0; i < ids.Count; i++)
            {
                if (i == array.Length - 1)
                {
                    str += "'" + array[i] + "')";
                }
                else
                {
                    str += "'" + array[i] + "',";
                }
            }

 

   Linq 的查詢代碼如下

      var queryAdministrativeDivision = _administrativeDivisionRepository
                .GetAll();

            var query = from ad in queryAdministrativeDivision
                        where str.Contains(ad.Id) //這里是 in 查詢
                        select ad;

 

最簡單的辦法,就是不用 in 查詢,直接使用 ef 的應該屬性,叫 Entity Framework 4.1 Linq Contains and StartsWith 就用可以了。

public void SeachAdministrativeDivision()
        {
            var ad = _administrativeDivisionRepository
                .GetAll()
                .Where(x => x.Id.StartsWith("52"));//StartsWith
        }

 

三、小結

  小結就是需要學習的東西還很多,我們需要更加的努力!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM