C# Linq查询未返回任何内容(语法可能错误)

C# Linq查询未返回任何内容(语法可能错误),c#,C#,我试图确保控制台中只显示非空项 我的代码是: internal static void RenderViews(List<BusinessProcessFlow> businessProcessListRaw) { foreach (var results in businessProcessListRaw.Where(p => p.Index == 1)) { var value = businessProcessListRaw.Where(x

我试图确保控制台中只显示非空项

我的代码是:

internal static void RenderViews(List<BusinessProcessFlow> businessProcessListRaw)
{
    foreach (var results in businessProcessListRaw.Where(p => p.Index == 1))
    {
        var value = businessProcessListRaw.Where(x => results.EntityStep != null);
        Console.WriteLine(value);
    }

    Console.ReadLine();
}
内部静态void renderview(列表businessProcessListRaw)
{
foreach(var导致businessProcessListRaw.Where(p=>p.Index==1))
{
var value=businessProcessListRaw.Where(x=>results.EntityStep!=null);
控制台写入线(值);
}
Console.ReadLine();
}

结果是一个空的控制台屏幕。

您应该首先提供模型定义
BusinessProcessFlowfor
类以获得完整答案。如果我们假设你的模型是这样的

public class BusinessProcessFlow
{
   public int Id {get; set;}
   public string Name { get; set; }
   public int Index { get; set; }
   public EntityStep EntityStep { get; set }

   public override string ToString() 
   { 
      return $"{Id} {Name}";
   }
}
internal static void RenderViews(List<BusinessProcessFlow> businessProcessListRaw)
    {
        foreach (var result in businessProcessListRaw.Where(p => p.Index == 1 && p.EntityStep != null))
        {
                Console.WriteLine(result);
        }

        Console.ReadLine();
    }
如果您想过滤所有
业务流程流
,并且
索引
等于
1
实体步骤
不是
null
,我认为查询应该是这样的

public class BusinessProcessFlow
{
   public int Id {get; set;}
   public string Name { get; set; }
   public int Index { get; set; }
   public EntityStep EntityStep { get; set }

   public override string ToString() 
   { 
      return $"{Id} {Name}";
   }
}
internal static void RenderViews(List<BusinessProcessFlow> businessProcessListRaw)
    {
        foreach (var result in businessProcessListRaw.Where(p => p.Index == 1 && p.EntityStep != null))
        {
                Console.WriteLine(result);
        }

        Console.ReadLine();
    }
内部静态void renderview(列表businessProcessListRaw)
{
foreach(变量结果为businessProcessListRaw.Where(p=>p.Index==1&&p.EntityStep!=null))
{
控制台写入线(结果);
}
Console.ReadLine();
}

另外,
result
的类型应该有一个
ToString()
方法覆盖,以便控制台以您想要的格式打印数据。

您当前所做的是有效地在同一列表上迭代两次,但使用不同的规则;第一次,您得到的每个项目的
索引==1
。下次,您将获得
EntityStep!=空
。然而,这两项工作并没有同时完成,所以您可能会得到错误的答案

您应该能够使用稍加修改的linq查询来完成所有这些工作:

internal static void RenderViews(List<BusinessProcessFlow> businessProcessListRaw)
{

    var value = businessProcessListRaw
                   .Where(p => p.Index == 1 && p.EntityStep != null)
                   .ForEach(p => Console.WriteLine(p));

    Console.ReadLine();
}
内部静态void renderview(列表businessProcessListRaw)
{
var值=businessProcessListRaw
.Where(p=>p.Index==1&&p.EntityStep!=null)
.ForEach(p=>Console.WriteLine(p));
Console.ReadLine();
}

恐怕您的主要错误在这一行:

var value = businessProcessListRaw.Where(x => results.EntityStep != null);
但是,如果您说没有任何输出到控制台,那么很可能传递的集合中没有此类数据

你可以在这里看到:

class Program
    {
        static void Main(string[] args)
        {
            var businessProcessListRaw = Init();

            foreach (var results in businessProcessListRaw.Where(p => p.Index == 1))
            {
                var value = businessProcessListRaw.Where(x => results.EntityStep != null);
                Console.WriteLine(value);
            }

            Console.ReadLine();
        }

        private static List<BusinessProcessFlow> Init()
        {
            return new List<BusinessProcessFlow>
            {
                new BusinessProcessFlow{Index = 1, EntityStep = new EntityStep()},
                new BusinessProcessFlow{Index = 1, EntityStep = new EntityStep()},
                new BusinessProcessFlow{Index = 2, EntityStep = new EntityStep()},
                new BusinessProcessFlow{Index = 1},
                new BusinessProcessFlow{Index = 1},
            };
        }
    }

    public class BusinessProcessFlow
    {
        public int Index { get; set; }
        public EntityStep EntityStep { get; set; }
    }

    public class EntityStep
    {
    }
并输出到控制台:

祝你好运

如果你的任务是

确保控制台中仅显示非空项

那么下面的步骤就可以了

internal static void PrintNotNulls(List<BusinessProcessFlow> businessProcessListRaw)
{
    foreach( var x in businessProcessListRaw)
    {  
       if (x != null) Console.WriteLine(x);
    }
} 

您可以修改这两种方法来检查不只是空值:“
x.Index==1
”或/和“
x.EntityStep!”null

是的,您的LINQ看起来是错误的(
x
甚至没有在第二个Where中使用,但我们对您的域模型了解不够,无法提出修复建议。除非您更详细地解释什么是
Index
EntityStep
以及它们为什么相关,否则我们只能猜测。可能
var value=results.EntityStep;
(value!=null)Console.WriteLine(value);
就是你的意思吗?你真的不可能设置一个调试点来看看发生了什么吗?我不认为这是一个真正的问题……这个答案有问题:1)
。ToList()
不是这里的问题,因为你只需要迭代。2)问题是控制台中不会打印任何内容:但如果有任何值,它至少会打印类似于
System.Linq.Enumerable+WhereListIterator'1[BusinessProcessFlow]'
的内容。