Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要对Linq中的null和非null值使用Count()_C#_Linq_Count - Fatal编程技术网

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