2011-06-20 75 views
0

搶兩列的訂單後,我有以下模式:LINQ到數據集:如何通過

層級ID,COUNTRYCODE,國家或地區名稱

我如何使用LINQ來獲得的枚舉集合 (TierId,)

我知道我可以做以下解決方案,但有沒有辦法避免雙重排序? 通過col3命令col1和col2(粘在一起)?

var a = from row in ds.Tables[1].AsEnumerable() 
     group row["CountryCode"] by row["TierId"] 
     into countrieCodes 
     select new 
      { 
       tierId = Convert.ToInt32(countrieCodes.Key)-1, 
       countrieCodesList = countrieCodes.Select(i => i.ToString()).ToList() 
       }; 

var b = from row in ds.Tables[1].AsEnumerable() 
     group row["CountryName"] by row["TierId"] 
     into countrieNames 
     select new 
     { 
      tierId = Convert.ToInt32(countrieNames.Key)-1, 
      countrieCodesList = countrieNames.Select(i => i.ToString()).ToList() 
     }; 

var c = from itemA in a 
     from itemB in b 
     where itemA.tierId == itemB.tierId 
     orderby itemA.tierId 
     select new { 
      TierId = itemA.tierId, 
      CountriesA = itemA.countrieCodesList, 
      CountriesB = itemA.countrieCodesList, 
     }; 

感謝

+0

你是否試圖將表交叉連接到自己的表,或者在TierId列中將表連接到自己?目前還不清楚你正在嘗試做什麼,並且從我猜測看來你的數據庫設計問題看起來不僅僅是代碼問題 –

+0

如果你可以重新格式化你的代碼以避免它滾動,那真的很有幫助。爲什麼到目前爲止這麼多的權利? (我現在無法自己做,因爲我即將下車,但你自己做這件事是值得的。) –

+0

縮進。抱歉,添麻煩了。 –

回答

0

好了,我不知道。試圖將eveything壓入Linq並不總是最可讀的方法。怎麼樣的替代:

class TierCountries 
    { 
     int TierId { get; private set } 
     public HashSet<string> CountryCodes { get; private set; } 
     public HashSet<string> CountryNames { get; private set; } 

     public TierCountries(int tierId) 
     { 
      TierId = tierId; 
      CountryCodes = new HashSet<string>(); 
      CountryNames = new HashSet<string>(); 
     } 
    } 

    var _TierCountryMap = new Dictionary<int, TierCountries>(); 

    foreach (var row in ds.Tables[1].AsEnumerable()) 
    { 
     int tierId = Convert.ToInt32(row["TierId"]); 
     TierCountries tc; 
     if (!_TierCountryMap.TryGet(tierId, out tc)) 
     { 
      tc = new TierCountries(tierId); 
      _TierCountryMap[tierId] = tc; 
     } 
     tc.CountryCodes.Add(row["CountryCode"]); 
     tc.CountryNames.Add(row["CountryName"]); 
    } 

沒有多少Linq,但只有一個通過表。

+0

接受了您的建議。就我的知識而言,我如何在LINQ中附加兩列以相互依賴並始終排序? –

+0

@ user311130:恩,不知道你到底是什麼。最好的可能是如果你用一個樣本問另一個問題。 – ChrisWue