C# 当两个Linq调用使用不同的语法时,我可以组合它们吗?

C# 当两个Linq调用使用不同的语法时,我可以组合它们吗?,c#,linq,C#,Linq,我有以下代码。这个函数有很多Linq调用,我得到了一些帮助来实现这一点 public IList<Content.Grid> Details(string pk) { IEnumerable<Content.Grid> details = null; IList<Content.Grid> detailsList = null; var data = _contentRepository.GetP

我有以下代码。这个函数有很多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;

    }
公共IList详细信息(字符串主键)
{
IEnumerable details=null;
IList detailsList=null;
var data=\u contentRepository.GetPk(pk);
var refType=this.GetRefType(pk);
var refStat=this.GetRefStat(pk);
var type=\u referencepository.GetPk(refType);
var stat=\u referencepository.GetPk(refStat);
细节=
从数据中提取数据
将s加入d上的状态。状态等于s.RowKey进入状态
来自处于status.DefaultIfEmpty()状态的
将t连接到d上的类型中。类型等于t.RowKey连接到类型中
在types.DefaultIfEmpty()中从t开始
选择新内容网格
{
PartitionKey=d.PartitionKey,
RowKey=d.RowKey,
订单=d.订单,
标题=d.标题,
状态=s==null?null:s.值,
StatusKey=d.状态,
Type=t==null?null:t.值,
类型键=d.类型,
Link=d.Link,
注释=d.注释,
TextLength=d.TextLength
};
detailsList=详细信息
.OrderBy(item=>item.Order)
.ThenBy(item=>item.Title)
.Select((t,index)=>newcontent.Grid()
{
PartitionKey=t.PartitionKey,
RowKey=t.RowKey,
行=索引+1,
顺序=t.顺序,
Title=t.Title,
状态=t.状态,
StatusKey=t.StatusKey,
类型=t.类型,
TypeKey=t.TypeKey,
Link=t.Link,
注释=t.注释,
TextLength=t.TextLength,
})
.ToList();
返回详细信息列表;
}

第一种使用Linq的一种格式,第二种使用另一种格式。有没有什么方法可以简化和/或合并这些内容?我真的很想让这个代码更简单,但我不知道如何做到这一点。如果您有任何建议,我们将不胜感激。

当然您可以将它们结合起来。Linq关键字(如
from
where
select
等)被转换为与下面调用的扩展方法类似的调用,因此实际上没有区别

如果您真的想将它们结合起来,最快的方法是在第一个查询周围放置
()
,然后在第二个查询中附加您在
详细信息上使用的方法调用。像这样:

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();
detailsList=
(来自数据//item.Order)//item.Title中的d)
.Select((t,index)=>newcontent.Grid()
{
//...
}).ToList();

但我认为那会很难看。在我看来,两个查询很好。

当然可以将它们组合起来。Linq关键字(如
from
where
select
等)被转换为与下面调用的扩展方法类似的调用,因此实际上没有区别

如果您真的想将它们结合起来,最快的方法是在第一个查询周围放置
()
,然后在第二个查询中附加您在
详细信息上使用的方法调用。像这样:

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();
detailsList=
(来自数据//item.Order)//item.Title中的d)
.Select((t,index)=>newcontent.Grid()
{
//...
}).ToList();

但我认为那会很难看。在我看来,两个查询很好。

注意:无论LINQ理解与使用扩展方法/lambdas,结果都是一样的。如果你所拥有的有效,你可以争辩:停止改变它;如果我改变了第二部分,那么我能把它们结合起来吗?注意:结果是一样的,不管LINQ理解与使用扩展方法/lambdas。如果你所拥有的有效,你可以争辩:停止改变它;如果我要改变第二部分,那么我能把它们结合起来吗?