小编Cha*_*ath的帖子

LINQ to Entities 无法识别该方法:LastOrDefault

概述:在 CompletedQuestions 表中,UserId 对应于完成该问题的用户。Id 属性对应于 Questions 表中的问题之一。我知道,我没有正确指定关系。但我不是很有经验。我只想完成一个项目,然后我会在了解更多信息后回来修复那些糟糕的编码实践。我无法理解以下异常。

LINQ to Entities does not recognize the method 'Riddle.Models.CompletedQuestion LastOrDefault[CompletedQuestion](System.Linq.IQueryable`1[Riddle.Models.CompletedQuestion])' method, and this method cannot be translated into a store expression.

    Line 46:                 if (RiddleCompleted == null)
    Line 47:                 {
    Line 48:                     var lastCompletedQuestion = _db.CompletedQuestions.Where(q => q.UserId == currentUserId) // exception occurs in this line
    Line 49:                                                                              .OrderBy(q => q.QuestionNumber)
    Line 50:                                                                              .LastOrDefault();
Run Code Online (Sandbox Code Playgroud)

发生异常的动作:

public ActionResult Riddle(int Id)
        {
            string currentUserId = User.Identity.GetUserId();
            var riddle = _db.Riddles.Where(r => r.Id == Id).Single();

            if …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework-6 asp.net-mvc-5

6
推荐指数
1
解决办法
6374
查看次数

实体框架COUNT性能差

使用带有MySql Connector 6.6.6.0的Entity Framework 5.0进行基于计数的查询时,我们遇到的性能非常差.我们的数据结构如下:

Table: Post
===========
ID           INT PRIMARY KEY
MemberID     INT NOT NULL
SiteID       INT NOT NULL
Description  VARCHAR(255) NOT NULL
Image        VARCHAR(255) NOT NULL
CreatedDate  DATETIME NULL

并使用具有linq查询的实体框架,如下所示:

var count = entities.Post.Where(p => 
    p.SiteID == 1 && p.CreatedDate != null).Count();

我们得到以下生成的SQL:

SELECT
`Extent1`.`ID`, 
`Extent1`.`MemberID`, 
`Extent1`.`SiteID`, 
`Extent1`.`Description`, 
`Extent1`.`Image`, 
`Extent1`.`CreatedDate`
FROM `Post` AS `Extent1`
 WHERE (`Extent1`.`SiteID` = 1) AND (`Extent1`.`CreatedDate` IS NOT NULL)

这会读取所有记录并将其计入内存中......效率极低,因为它应该类似于:

SELECT COUNT(ID) FROM `Post` WHERE `SiteID` = 1 AND `CreatedDate` IS NOT NULL;

反正有没有提示我们不想将所有记录读入内存并只执行SQL …

c# entity-framework entity-framework-5 entity-framework-6

5
推荐指数
1
解决办法
5580
查看次数

有没有办法可以使用 LINQ 语句获取行数?

我一直在使用这个 LINQ 语句:

 var phrases = await db.Phrases
               .AsNoTracking()
               .ToListAsync();
Run Code Online (Sandbox Code Playgroud)

但我需要的是计算短语中的行数。

我以前从未使用过 LINQ 来执行此操作。有没有办法做到这一点?

c# linq entity-framework

-4
推荐指数
1
解决办法
644
查看次数