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]'
的内容。