如何在选择新对象时使用LINQ进行分配

时间:2016-07-25 17:48:55

标签: c# asp.net entity-framework linq linq-to-sql

我有一个名为GameImageGameTone的数据合约。我正在尝试加入这两个实体,并在0-11之间为图像/音调关联指定一个唯一的随机位置。我能够加入表格,但不确定在LINQ lambda表达式中创建对象时是否有办法分配位置。

            // 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; }
}

1 个答案:

答案 0 :(得分: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()
                });