此函数只能在 Entity Framework 更新后由 LINQ to Entities 调用

This function can only be invoked by LINQ to Entities after Entity Framework update

var messages = (from sms in
                (from m in rv.tbl_sms_messages
                where m.idtbl_user == ids.id
                where m.sms_date >= days.days7
                orderby m.sms_date descending
                select m)
                .Take(15)
                .AsEnumerable()
                    select new last10msgs 
                    { 
                        dat = SqlFunctions.StringConvert((double)SqlFunctions.DatePart("dd",sms.sms_date)) + " " 
                                + SqlFunctions.DateName("mm", sms.sms_date), message = sms.message 
                    }).AsEnumerable();

从 EF4 更新到 EF6+ 后出现错误:

This function can only be invoked from LINQ to Entities.

问题是您在尝试使用SqlFunctions时已经完成了数据库操作。这些函数必须放在 运行 您的查询之前并将结果存储到对象中。调用 AsEnumerable 后,您的查询就完成了。所以简短的回答是将包含这些功能的逻辑移动到针对数据库运行的查询(在 Take 子句之前)