请教嵌套foreach的有关问题

请问嵌套foreach的问题
LIist<a> list1;  a的实体有 id  name
List<b>  list2;  b的有a表的id和另一个表的id

foreach (var item in list1)  {
    foreach (var item2 in list2)  {
        if(item.id==item2.id)
          { 
             <label><input type="checkbox"   checked='checked'  />item .name</label>                                                                        
             break;
         }
   }
}

我这样可以得到list2中选中的值,但是我现在还想得到list1中没有选中的值,请问怎么操作
就比如 
a的id: 2,3,4
b的id :2,3

我最后想得到的是2(选中),3(选中),4(不选中)
if后面加else的话,对比的就会得到2(选中),3(不选中),3(选中),4(不选中)  肯定是不行的 请问要怎么实现



------解决思路----------------------
1、反过来循环,list2嵌套遍历list1
或者
2、定义一个StringBuilder sb = new StringBuilder();
在if为true的时候,sb.Append(item .name)
最后sb不在list1.ToArray()里面的,就是list1未选中的
------解决思路----------------------
            List<a> list1 = new List<a>();
            List<b> list2 = new List<b>();
            var query = from a in list1
                        join b in list2 on a.id equals b.id into g
                        from c in g.DefaultIfEmpty()
                        select new { a, c };

如果c为null,则没有匹配到,否则代表有join
------解决思路----------------------
foreach (var item in list1)  {
    foreach (var item2 in list2)  {
        if(item.id==item2.id)
          { 
             <label><input type="checkbox"   checked='checked'  />item .name</label>                                                                        
           break; 这里的break去掉
         }else
        {
          这里加入未选中的item.Name
        }
   }
}