C# 需要对Linq中的null和非null值使用Count()
这是我的密码:C# 需要对Linq中的null和非null值使用Count(),c#,linq,count,C#,Linq,Count,这是我的密码: var value = query.Select( a => new CHART_MODEL { TEXT = "xyz", COUNT1 = (a.TOPLAM_FIYAT != null).ToString().Count(), COUNT2 = (a.TOPLAM_FIYAT == null) ? ToString().Count() : 0
var value = query.Select(
a => new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = (a.TOPLAM_FIYAT != null).ToString().Count(),
COUNT2 = (a.TOPLAM_FIYAT == null) ? ToString().Count() : 0
}
).ToList();
以下是错误:
System.NotSupportedException:'LINQ to Entities无法识别方法'System.String ToString()'方法,并且无法将此方法转换为存储表达式。'
和图表模型
public class CHART_MODEL
{
public int COUNT1 { get; set; }
public int COUNT2 { get; set; }
public string TEXT { get; set; }
}
我的问题是:我必须用Count()计算空值和非空值。但它不允许我写作。我不知道如何使用Count()以正确的方式重新排列linq查询代码。这是一个错误,因为EF不知道如何在sql中执行
.ToString()
方法
像EF在普通sql中没有相关方法的方法,将抛出与您收到的错误类似的错误。
您可以使用立即执行。诸如:ToList
或ToArray
之类的方法将强制执行查询,从而将数据加载到内存中,当加载数据时,其余的操作符将使用Linq to对象对该内存中的数据执行
因此,您可以使用toList()
加载数据,然后使用其余的代码和方法,如toString()
不会抛出错误
query.toList().Select(..)
您可以在此处阅读有关延迟执行与立即执行的更多信息:
这是一个错误,因为EF不知道如何在sql中执行
.ToString()
方法
像EF在普通sql中没有相关方法的方法,将抛出与您收到的错误类似的错误。
您可以使用立即执行。诸如:ToList
或ToArray
之类的方法将强制执行查询,从而将数据加载到内存中,当加载数据时,其余的操作符将使用Linq to对象对该内存中的数据执行
因此,您可以使用toList()
加载数据,然后使用其余的代码和方法,如toString()
不会抛出错误
query.toList().Select(..)
您可以在此处阅读有关延迟执行与立即执行的更多信息:
最简单的方法是
var value = new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = query.Where(a=>a.TOPLAM_FIYAT != null).Count(),
COUNT2 = query.Where(a=>a.TOPLAM_FIYAT == null).Count()
};
注意,这将发出两条select语句
如果确实希望避免使用这两个select语句,则必须引入一个伪分组,例如
var value = (from r in query
group r by 1 into results
select new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = results.Where(a => a.TOPLAM_FIYAT != null).Count(),
COUNT2 = results.Where(a => a.TOPLAM_FIYAT == null).Count()
}).Single();
最简单的方法是
var value = new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = query.Where(a=>a.TOPLAM_FIYAT != null).Count(),
COUNT2 = query.Where(a=>a.TOPLAM_FIYAT == null).Count()
};
注意,这将发出两条select语句
如果确实希望避免使用这两个select语句,则必须引入一个伪分组,例如
var value = (from r in query
group r by 1 into results
select new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = results.Where(a => a.TOPLAM_FIYAT != null).Count(),
COUNT2 = results.Where(a => a.TOPLAM_FIYAT == null).Count()
}).Single();
只需补充@sgmoore的答案,您就可以将筛选条件放在
.Count
方法本身中:
var value = new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = query.Count(a => a.TOPLAM_FIYAT != null),
COUNT2 = query.Count(a => a.TOPLAM_FIYAT == null)
};
在C#9中引入了新的
is null
和is not null
语法。它读起来非常好,但仍然可以在Linq to SQL中使用。只是补充@sgmoore的答案,您可以将筛选条件放在.Count
方法本身中:
var value = new CHART_MODEL
{
TEXT = "xyz",
COUNT1 = query.Count(a => a.TOPLAM_FIYAT != null),
COUNT2 = query.Count(a => a.TOPLAM_FIYAT == null)
};
在C#9中引入了新的
is null
和is not null
语法。它读起来非常好,但仍在Linq to SQL中使用。请参见:和:这是否回答了您的问题?我完全不明白你为什么要在这里使用ToString()
。如果你想计算一些东西,为什么要涉及到ToString
?请参阅:和:这是否回答了你的问题?我完全不明白你为什么要在这里使用ToString()
。如果你想计算一些东西,为什么要涉及到ToString
?