概述:在 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) 使用带有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 …
我一直在使用这个 LINQ 语句:
var phrases = await db.Phrases
.AsNoTracking()
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
但我需要的是计算短语中的行数。
我以前从未使用过 LINQ 来执行此操作。有没有办法做到这一点?