2010-02-05 88 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