1

私は次のコードを持っています:

    public IEnumerable<Content.Grid> DetailsBase(string pk)
    {
        var data = contentRepository.GetPk(pk);
        var refType = this.GetRefType(pk);
        var refStat = this.GetRefStat(pk);
        var type = referenceRepository.GetPk(refType);
        var stat = referenceRepository.GetPk(refStat);
        var dataOut =
        from d in data
        join s in stat on d.Status equals s.RowKey into statuses
        from s in statuses.DefaultIfEmpty()
        join t in type on d.Type equals t.RowKey into types
        from t in types.DefaultIfEmpty()
        select new Content.Grid
        {
            PartitionKey = d.PartitionKey,
            RowKey = d.RowKey,
            Order = d.Order,
            Title = d.Title,
            Status = s == null ? "" : s.Value,
            StatusKey = d.Status,
            Type = t == null ? "" : t.Value,
            TypeKey = d.Type
        };
        return dataOut;
    }

そしてこのクラス:

    public class Grid
    {
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        // Counter
        public int Row { get; set; }
        //
        public int Order { get; set; }
        public string Title { get; set; }
        public string Status { get; set; }
        public string StatusKey { get; set; }
        public string Type { get; set; }
    }

Rowの値をインクリメントするように設定する方法はありますか?別の選択で私はこれを使用しました:

        return dataIn
            .OrderBy(item => item.Order)
            .Select((t, index) => new Content.Grid()
            {
                PartitionKey = t.PartitionKey,
                RowKey = t.RowKey,
                Row = index + 1,

最初の選択に似たようなものを使用する方法はありますか?

アップデート:

私はうまくいくように見える次のものを持っていますが、これらの2つの選択に参加する方法がわかりません:

    public IList<Content.Grid> GetContentGrid(string pk)
    {
        var data =
        from d in contentRepository.GetPk(pk)
        join s in referenceRepository.GetPk(this.GetRefStat(pk)) 
        on   d.Status equals s.RowKey into statuses
        from s in statuses.DefaultIfEmpty()
        join t in referenceRepository.GetPk(this.GetRefType(pk))
        on   d.Type equals t.RowKey into types
        from t in types.DefaultIfEmpty()
        select new Content.Grid
        {
            PartitionKey = d.PartitionKey,
            RowKey = d.RowKey,
            Order = d.Order,
            Title = d.Title,
            Status = s == null ? "" : s.Value,
            StatusKey = d.Status,
            Type = t == null ? "" : t.Value,
            TypeKey = d.Type,
            Link = d.Link,
            Notes = d.Notes,
            TextLength = d.TextLength,
            // AuditableTable
            Created = d.Created ?? new DateTime(2012, 1, 1),
            CreatedBy = d.CreatedBy ?? "n/a",
            Modified = d.Modified ?? new DateTime(2012, 1, 1),
            ModifiedBy = d.ModifiedBy ?? "n/a" 
        };
        return data
            .OrderBy(item => item.Order)
            .Select((t, index) => new Content.Grid()
            {
                PartitionKey = t.PartitionKey,
                RowKey = t.RowKey,
                Row = index + 1,
                Order = t.Order,
                Title = t.Title,
                Status = t.Status,
                StatusKey = t.StatusKey,
                Type = t.Type,
                TypeKey = t.TypeKey,
                Link = t.Link,
                Notes = t.Notes,
                TextLength = t.TextLength,
            })
            .ToList();
    }
4

1 に答える 1

7

クエリ式でインデックス関連のプロジェクションを指定することはできませんが、次のようなことができます。

    var dataOut = from d in data
                  join s in stat on d.Status equals s.RowKey into statuses
                  from s in statuses.DefaultIfEmpty()
                  join t in type on d.Type equals t.RowKey into types
                  from t in types.DefaultIfEmpty()
                  select new { d, s, t };
    return dataOut.Select((x, index) => new Content.Grid {
                PartitionKey = x.d.PartitionKey,
                RowKey = x.d.RowKey,
                Order = x.d.Order,
                Title = x.d.Title,
                Status = x.s == null ? "" : x.s.Value,
                StatusKey = x.d.Status,
                Type = x.t == null ? "" : x.t.Value,
                TypeKey = x.d.Type,
                Row = index
           };

ただし、順序を指定しないと、これは失敗する可能性があることに注意してください。または、信頼できない順序付けが行われるだけです。

于 2012-08-19T08:21:51.857 に答える