簡體   English   中英

使用EF查詢映射SQL查詢不起作用

[英]Map sql query with EF query doesn't work

我正在嘗試使用EF6執行查詢.sql格式的我的查詢是這樣的:

/****** Script for SelectTopNRows command from SSMS  ******/
SELECT 
      [SUBJECT],COUNT(SUBJECT)

  FROM [PGC].[dbo].[QC] group by [SUBJECT]

效果很好。

主題是字符串類型。

但是我將查詢轉換為EF,如您在此處看到的:

 listDataSource =
                db.QCs.Where(j => j.SUBJECT != null).ToList().GroupBy(i => new {i.SUBJECT}).Select(m => new chart()
                    {
                        date = m.Key.SUBJECT,
                        Count = m.Count(i=>i.SUBJECT).ToString()
                    }).ToList();

m.Count(i => i.SUBJECT)返回錯誤: can't convert expression type string to return type bool

最好的祝福

您不應該使用Count<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)因為它:

返回一個數字,該數字表示指定序列中有多少個元素滿足條件。 資源

i=>i.SUBJECTFunc<TSource, String>但是該方法需要Func<TSource, Boolean> ,因此您收到該異常消息。

而是使用Count<TSource>(IEnumerable<TSource>) ,它將返回序列中元素的總數,例如:

 Count = m.Count().ToString()

擴展了Yuriy的答案(完全可以接受),並進行了一些修復,主要是出於性能方面的考慮:

listDataSource = db.QCs
    .Where(j => j.SUBJECT != null)
    .GroupBy(i => i.SUBJECT) //no need to create an anonymous type, you don't use it afterwards
    .Select(group => new { SUBJECT = group.Key, Count = group.Count()}) //counting in SQL is faster
    .AsEnumerable() //materialization, all the heavy lifting is performed by SQL until now
    .Select(value => //seems redundant, but the previous selection just translates into an SQL select statement with SUBJECT and Count columns
        new chart
        {
            date = value.SUBJECT,
            Count = value.Count.ToString()
        })
    .ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM