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

时间:2014-02-18 10:40:24

标签: c# .net linq entity-framework linq-to-sql

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

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查询,所以它会引发异常。然后我需要做的是在该结果上创建另一个循环并在该成员上运行我的方法,有没有办法不需要第二个循环?

3 个答案:

答案 0 :(得分:0)

如果你对linq方法链样式没有任何问题,你可以做这样的事情,

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

并编写一些像这样的方法,

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

答案 1 :(得分:-1)

你可以这样做:

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 documentation

答案 2 :(得分:-1)

好吧,我怕你不能。

除非您可以使用SqlFunctions EF提供的其中一个,否则您必须构建自己的表达式树,如果MyCustomMethod的角色是“反序列化”,我认为这是不可能的。 byte [] to和object“。