1

次のコードがあります。関数には多くの Linq 呼び出しがあり、これを配置するのに役立ちました。

    public IList<Content.Grid> Details(string pk)
    {
        IEnumerable<Content.Grid> details = null;
        IList<Content.Grid> detailsList = null;
        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);
        details =
        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 ? null : s.Value,
            StatusKey = d.Status,
            Type = t == null ? null : t.Value,
            TypeKey = d.Type,
            Link = d.Link,
            Notes = d.Notes,
            TextLength = d.TextLength
        };
        detailsList = details
                .OrderBy(item => item.Order)
                .ThenBy(item => item.Title)
                .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();
        return detailsList;

    }

1 つ目は Linq に 1 つの形式を使用し、2 つ目は別の形式を使用します。これらを単純化および/または組み合わせる方法はありますか? このコードをもっとシンプルにしたいのですが、これを行う方法がわかりません。どんな提案でも大歓迎です。

4

1 に答える 1

1

もちろん、それらを組み合わせることができます。from、などの Linq キーワードは、以下で呼び出す拡張メソッドのような呼び出しに変換されるため、実質的に違いはありません whereselect

それらを本当に結合したい場合、最も簡単な方法は()、最初のクエリを回避し、次に使用するメソッド呼び出しをdetails2 番目のクエリに追加することです。このような:

detailsList =
        (from d in data                    // <-- The first query
         // ...
         select new Content.Grid
         {
             // ...
         })
         .OrderBy(item => item.Order)    // <-- The calls from the second query
         .ThenBy(item => item.Title)
         .Select((t, index) => new Content.Grid()
         {
             //...
         }).ToList();

しかし、それは醜いと思います。IMO では 2 つのクエリで問題ありません。

于 2012-05-31T07:25:52.450 に答える