2010-02-05 84 views
2

我有一個收音機列表,我試圖製作一個更加用戶友好的版本。在幕後,所有的描述都是stringIds,所有的零件號都是數據庫ID。比嵌套foreach更好的方法嗎?

現在,我有這樣的代碼:

 var z = (from w in wireless 
             join s in allStrings on w.DescriptionId equals s.StringId 
             join u in allUids on w.Uid equals u.Uid 
             where s.LanguageId == 0 
             select new {w, s, u}); 

     List<RadioProperty> rp = new List<RadioProperty>(); 
     foreach (var x in z) 
     { 
      foreach(var y in x.w.RadioToVoltage) 
      { 
       rp.Add(new RadioProperty 
       { 
        PartNumber = x.u.PartNumber, 
        Description = x.s.Description, 
        CurrentType = y.Id.VoltageType, 
        Voltage = y.Id.VoltageValue, 
       }); 
      } 
     } 

基本上每個無線電零件號可以有多種電壓選項。 我們可以用無線電ABC與48VAC,110VAC和240VAC選項,所以我試圖創建3個單獨的RadioProperty項目,每個電壓選項一個。

有沒有更好的方法來做到這一點?我正在運行.Net 3.5。

感謝

+0

不管採用哪種方式,在看這段代碼,第一次我比較困惑的非嵌套循環的非描述性變量名稱。 – 2010-02-05 20:50:30

+0

沒錯,不是我常見的命名方案,只是想把一個例子放在一起。 – taylonr 2010-02-05 20:52:57

回答

2

沒有測試過,但你應該能夠得到這一切在一個LINQ聲明事端glike

List<RadioProperty> rp = (from w in wireless 
        join s in allStrings on w.DescriptionId equals s.StringId 
        join u in allUids on w.Uid equals u.Uid 
        where s.LanguageId == 0 
        from t in w.RadioToVoltage 
        select new RadioProperty { 
         PartNumber = w.u.PartNumber, 
         Description = w.s.Description, 
         CurrentType = t.Id.VoltageType, 
         Voltage = t.Id.VoltageValue, 
        }).ToList(); 
+0

+1。這是一個更好的方法。 – 2010-02-05 20:55:39

+0

謝謝。我知道我在寫難看的代碼,你的情況好多了。 – taylonr 2010-02-05 21:00:26