C# C实体框架Linq何处发布

C# C实体框架Linq何处发布,c#,linq,where,whitespace,trim,C#,Linq,Where,Whitespace,Trim,MySql DbContext有两个linq查询: var letter1 = (from l in dbContext.letters_incoming where l.LetterText.Trim() == "simple letter text".Trim() select l).FirstOrDefault(); var letter2 = dbContext.letters_incoming.Where(new Func<ModelLetterIncomi

MySql DbContext有两个linq查询:

var letter1 = (from l in dbContext.letters_incoming 
    where l.LetterText.Trim() == "simple letter text".Trim() 
    select l).FirstOrDefault();

var letter2 = dbContext.letters_incoming.Where(new Func<ModelLetterIncoming, bool>(l => {
        string name = l.LetterText;
        if (name == "simple letter text")
           return true;
        else return false;
    })).FirstOrDefault();

第一个查询返回null,但第二个查询返回正确的值。这是否可能是由我的Where条件中的空格引起的?

我补充道,问题出在MySqlConnectionStringBuilder中

mySqlConnectionStringBuilder.CharacterSet = "utf8"; 

一方面,对简单字母文本调用Trim是多余的,可以删除。这是一个不带前导或尾随空格的字符串文本,用于修剪elimates。第一个linq查询转换为SQL查询并在数据库中执行。第二个将整个传入表中的字母拉入内存并在那里执行过滤。这可能会导致差异,但不确定确切原因。您可以使用类似于dbContext.Database.log=Console.WriteLine的日志检查生成了哪个SQL查询,并检查生成了什么查询以及为什么找不到行。可能是一些排序问题,尤其是如果字符串不是英文的。如果没有看到错误,您能用这段代码验证问题吗?@RandRandom,问题是我无法通过字符串值从数据库集筛选中选择任何实体。请检查如何在mysql中使用西里尔字符或UTF。这个问题似乎与EF无关,而是与mysql有关。确保您的查询在没有EF first simple select*的情况下运行,其中name=您的西里尔字母字符串。我已经多年没有使用mysql了,所以无法给出确切的原因。