2016-07-25 47 views
-1

我有一個數據合同,名爲GameImageGameTone。我試圖加入這兩個實體,並將0-11之間的唯一隨機位置分配給圖像/色調關聯。我能夠加入表格,但我不確定在LINQ lambda表達式中創建對象時是否有方法分配位置。如何在選擇新對象時使用LINQ進行分配

  // Need random positions from 0-11 to to be associated to an image/tone 
      var positions = Enumerable.Range(0, 11).Shuffle().ToList(); 

      // Associate image/tones 
      imageToneData = game.GameImages.Shuffle() 
       .Join(game.GameTones, gi => gi.GameId, gt => gt.GameId, (gi, gt) => new ImageToneData 
       { 
        Image = new ImageData() 
        { 
         ImageFileName = gi.Image.ImageFileName, 
         ImageId = gi.ImageId 
        }, 
        Tone = new ToneData() 
        { 
         ToneFileName = gt.Tone.ToneFileName, 
         ToneId = gt.ToneId 
        }, 
        Position = // What goes here? 
       }); 

這是我的數據契約

[DataContract] 
public class ImageToneData 
{ 
    [DataMember] 
    public ImageData Image { get; set; } 

    [DataMember] 
    public ToneData Tone { get; set; } 

    [DataMember] 
    public int Position { get; set; } 
} 

[DataContract] 
public class ImageData 
{ 
    [DataMember] 
    public int ImageId { get; set; } 

    [DataMember] 
    public string ImageFileName { get; set; } 
} 

}

[DataContract] 
public class ToneData 
{ 
    [DataMember] 
    public int ToneId { get; set; } 

    [DataMember] 
    public string ToneFileName { get; set; } 
} 

回答

0
var positions = Enumerable.Range(0, 11).OrderBy(a => Guid.NewGuid()).ToList(); 

    // Associate image/tones 
      imageToneData = game.GameImages.Shuffle() 
       .Join(game.GameTones, gi => gi.GameId, gt => gt.GameId, (gi, gt) => new ImageToneData 
       { 
        Image = new ImageData() 
        { 
         ImageFileName = gi.Image.ImageFileName, 
         ImageId = gi.ImageId 
        }, 
        Tone = new ToneData() 
        { 
         ToneFileName = gt.Tone.ToneFileName, 
         ToneId = gt.ToneId 
        }, 
        Position = positions.First() 
       });