相关疑难解决方法(0)

避免在Entity Framework中重复投影代码

我正在尝试解决类似于此处描述的问题

在LINQ to Entities中初始化强类型对象

只是完全相反的方向.我的存储库中有许多函数,所有函数都返回相同形状的数据.问题是我的投影代码:

select new pocoClass
 {
   // complex projection that is several pages long includes grabbing a graph of data
 }
Run Code Online (Sandbox Code Playgroud)

目前存在于存储库中的每个查询.我试过将它移动到一个对象初始化器中,但这给了我可怕的"LINQ to Entities中只支持无参数构造函数和初始化器".问题.

我确实试过分成两个查询

var candidates = (from thing in _entities.whatever
  where (complex.stuff==true)
  select thing);

var final = (from thing in candidates.AsEnumerable()
  let x = thing.ITEMS.Where(blah=>blah.blah==param)
  let y = x.OTHERITEMS.FirstOrDefault()
  select new pocoClass(thing,x,y);
Run Code Online (Sandbox Code Playgroud)

但是这里final始终为null,并且永远不会调用新pocoClass中的代码.我在上面包含了x和y,因为它们在每次使用投影时总是有所不同.

那么,我是否必须回到我的投影的多个副本或者还有另一种方法吗?

c# linq entity-framework entity-framework-4

5
推荐指数
1
解决办法
2269
查看次数

什么可能的解决方法是"只有无参数构造函数是Linq to Entites的支持"

在我的查询中,我需要返回没有默认构造函数的类的实例(具体来说,这是在自定义成员资格提供程序中,而MembershipUser是罪魁祸首)

var users = from l in context.Logins
    select new MembershipUser(
        Name,
        l.Username, // username
        l.Id, // provider key
        l.MailTo,
        l.PasswordQuestion,
        l.Notes.FirstOrDefault().NoteText,
        l.IsApproved,
        l.IsLockedOut,
        l.CreatedOn,
        l.LastLoginOn.HasValue ? l.LastLoginOn.Value : DateTime.MinValue,
        l.LastActivityOn.HasValue ? l.LastActivityOn.Value : DateTime.MinValue,
        DateTime.MinValue,
        l.LastLockedOutOn.HasValue ? l.LastLockedOutOn.Value : DateTime.MinValue
    );
Run Code Online (Sandbox Code Playgroud)

在语法上是正确的,但会导致运行时错误,因为LINQ to Entities中仅支持无参数构造函数和初始值设定项.

更新:作为一种解决方法我现在将选择带入List(解析运行查询表达式)然后我可以从该列表中选择新的MembershipUser.

var users = (from l in context.Logins
    select new { login = l }).ToList().Select(u => new MembershipUser (
Name,
u.login.Username, // username
u.login.Id, // provider key
u.email.MailTo,
u.login.PasswordQuestion,
u.login.Notes.FirstOrDefault().NoteText,
u.login.IsApproved,
u.login.IsLockedOut,
u.login.CreatedOn,
u.login.LastLoginOn.HasValue ? …
Run Code Online (Sandbox Code Playgroud)

linq-to-entities entity-framework

4
推荐指数
1
解决办法
3511
查看次数