2013-01-25 235 views
0

我有這樣LINQ的子選擇查詢

public class Worksheet 
    { 
     public string WorksheetName { get; set; } 
     public string WorksheetId { get; set; } 
     public string TestSymbol { get; set; } 
     public string TestId { get; set; } 

     public List<Samples> Samples { get; set; } 

     public Worksheet() 
     { 
      Samples = new List<Samples>(); 
     } 
     public Worksheet(string worksheetname, string worksheetid, string testsymbol, string testid) 
     { 
      WorksheetName = worksheetname; 
      WorksheetId = worksheetid; 

      TestSymbol = testsymbol; 
      TestId = testid; 

      Samples = new List<Samples>(); 
     } 

    } 
    public class Samples 
    { 
     public string SampleId { get; set; } 
     public string SampleName { get; set; } 

     public Samples() 
     { 
      AssociatedSheets = new List<Worksheet>(); 
     } 

     public Samples(string sampleid, string samplename) 
     { 
      AssociatedSheets = new List<Worksheet>(); 

      SampleId = sampleid; 
      SampleName = samplename; 
     } 

     public List<Worksheet> AssociatedSheets { get; set; } 
    } 

結構在手錶觀察時的集出現

  • 工作表1
    • 樣品A
    • 樣品B
  • Workshe等2
    • 樣品C
    • 樣品A

我想是設置AssociatedSheets各樣品中,以顯示包含它的工作表。

,以便它顯示

  • 工作表1
    • 樣品A
      • 工作表1
      • 工作表2
    • 樣品B
      • 工作表1
  • 工作表2
    • 樣品C
      • 工作表2
    • 樣品A
      • 工作表1
      • 工作表2

我已經開發了這樣的事情,但顯然它不會工作。 之後,我想分開選擇每個樣本。 有人能提醒:

 List<Samples> AllSamples = new List<Samples>(); 

     //Step 4. Add possible worksheets to each sample. 
     foreach (Samples sample in sheets.SelectMany(x => x.Samples).ToList()) 
     { 
      List<Worksheet> sampleitem = sheets.SelectMany(x => x.Samples.Select(y => y.SampleId) == sheets.SelectMany(k => k.Samples).Select(h => h.SampleId).ToList()); 

      sample.AssociatedSheets = AssociatedSheets; 

      if (!AllSamples.Contains(sample)) 
       AllSamples.Add(sample); 
     } 

回答

1

簡單,但做的工作:

foreach (var grouping in from worksheet in worksheets 
         from sample in worksheet.Samples 
         group worksheet by sample) // Groups the worksheets by sample 
    grouping.Key.AssociatedSheets = grouping.Distinct().ToList(); // grouping.Key is the key of the group (the sample) and ((IEnumerable)grouping) is the elements in the group (the worksheets 
1

[編輯]從我以前的答案代碼修復

這也許可以做到這一點:

List<Sample> allSamples = new List<Sample>(); 
foreach (Sample sample in sheets.SelectMany(x => x.Samples).Distinct()) 
{ 
    var sampleSheets = sheets.Where(s => s.Samples.Contains(sample)).Distinct(); 
    sample.AssociatedSheets.AddRange(sampleSheets); 
    allSamples.Add(sample); 
}