【问题标题】:keeping all result in a single list in linq C#?将所有结果保存在 linq C# 中的单个列表中?
【发布时间】:2015-04-01 20:22:19
【问题描述】:

使用下面的简单示例,我的目标是将 linq 结果保持在同一个列表中:

     for (int j = 0; j < YatakList.Count; j++)
        {
            if (YatakList[j].GrupId != Op.yatakGrupId)
            {
                continue;
            }

            var AllBlanks = YatakList[j].blanks
                .SelectMany((item, index) => 
                    item.Select(entry => new 
                    { 
                        Index = index, 
                        Start = entry.Key, 
                        Length = entry.Value, 
                        Id = YatakList[j].Id, 
                        GrupId = YatakList[j].GrupId 
                    }))
                .OrderBy(item => item.Start);
            var LenghtSuitingBlanks = from blank in AllBlanks 
                where (blank.Length >= Op.sure) 
                select blank;
            var closestDiff = LenghtSuitingBlanks.First();

        }

通过使用 for 循环,我从 YatakList 中获得了第一个结果,但在 for 循环的第二种情况 (j=1) 中,我得到了第二个结果集,我失去了第一个结果集。 我的问题是:

如何将 linq 的结果集保存在列表中 或

是否有不使用 for 循环的替代方式(首选解决方案)

【问题讨论】:

  • 既然您已将查询的所有结果声明为循环内部的局部变量,那么您期望结果会去哪里?
  • 我正在阅读您的示例,但我无法弄清楚您要做什么?您是否需要 YatakList 中不在 Op.GroupId 中的所有银行?
  • AllBlanks retrn 类型是匿名的,我想将结果集保留在 for 循环之前定义的 List 中。或者 YatakList 中的所有元素在字典类型中保持空白是否有替代解决方案返回 YatakList 中的所有结果
  • 我认为您想说的是重新排序您拥有的相同列表集合。我无法弄清楚你在代码中做了什么。
  • 让我更清楚地解释我的问题:

标签: c# linq anonymous-types


【解决方案1】:

我通过创建一个名为 UygunYatak 的类解决了这个问题,然后在另一个循环的帮助下收集列表中的所有元素。

       for (int i = 0; i < YatakList.Count; i++)
        {
            if (YatakList[i].GrupId != Op.yatakGrupId)
            {
                continue;
            }

            var AllBlanks = YatakList[i].blanks.SelectMany((item, index) => item.Select(entry => new { Index = index, Start = entry.Key, Length = entry.Value, Id = YatakList[i].Id, GrupId = YatakList[i].GrupId })).OrderBy(item => item.Start);
            var LenghtSuitingBlanks = from blank in AllBlanks where (blank.Length >= Op.sure) orderby blank.Start select blank;

            for (int j = 0; j < LenghtSuitingBlanks.Count(); j++)
            {
                UygunYatak uygunYatak = new UygunYatak();
                uygunYatak.Id = LenghtSuitingBlanks.ElementAt(j).Id;
                uygunYatak.GrupId = LenghtSuitingBlanks.ElementAt(j).GrupId;
                uygunYatak.Start = LenghtSuitingBlanks.ElementAt(j).Start;
                uygunYatak.Length = LenghtSuitingBlanks.ElementAt(j).Length;

                UygunYatakList.Add(uygunYatak);
            }
        }

public class UygunYatak
{
    public int Id;
    public int GrupId;
    public int Start;
    public int Length;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多