【问题标题】:How to use LINQ to assign while selecting to new object如何在选择新对象时使用 LINQ 进行分配
【发布时间】:2016-07-25 17:48:54
【问题描述】:

我有一个名为 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; }
}

【问题讨论】:

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


    【解决方案1】:
      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()
                    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 2011-01-23
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多