繁体   English   中英

在EntityFramework结果上应用自定义方法

[英]Apply a custom method on EntityFramework results

有没有办法做这样的事情?

using (var db = new MyEntities())
{
    // getting all users with EntityFramework 6
    var allUsers = from u in db.Users
                   select new
                   {
                       MyCustomMethod(u.FirstName)
                   };
}

当然,由于EF6无法将我的方法转换为SQL查询,因此会引发异常。 然后,我需要做的是在该结果上创建另一个循环并在该成员上运行我的方法,有没有办法不需要第二个循环?

如果您对linq方法链样式没有任何疑问,可以执行以下操作,

db.Users.AsEnumerable().Select(method);

并写一些这样的方法,

 public string method(User a)
 {
     return a.UserName;
 }

你可以这样做:

var databaseUsers = from u in db.Users
                    /* add clauses to execute in the database here */
                    select new { u.FirstName };

var allUsers = from u in databaseUsers.AsEnumerable()
               select new
               {
                   MyCustomMethod(u.FirstName)
               };

.AsEnumerable()调用从本质上告诉EF,该调用之后发生的事情不应转换为数据库逻辑。 它不执行任何代码。 它只是将表达式的类型从IQueriable<T>更改为IEnumerable<T>

有关更多信息,请参见AsEnumerable文档

好吧,恐怕你做不到。

除非您可以使用EF提供的SqlFunctions之一,否则您必须构建自己的表达式树,而且我认为,如果MyCustomMethod的作用是“将byte []反序列化为对象并对其反序列化”,那将是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM