左连接Code First MVC 4 EF4.1

时间:2012-07-07 18:07:28

标签: asp.net-mvc razor ef-code-first left-join

我正在创建一个系统,用户可以通过该系统完成帐户,具体操作如下:

表:

SettingsTypes

  1. 编号
  2. 名称
  3. 设置

    1. 编号
    2. FkSettingTypeId
    3. IsEmailActivated
    4. IsSMSActivated
    5. IntervalNotification
    6. 所以SettingsType表有这些值:

      1. 如果时间差不多结束,请注意
      2. 警告我的类别中的优惠
      3. ...
      4. 回到我的MVC4应用程序我需要创建一个控制器,它将使用Setting返回每个SettingsType以获取一个html表,用户可以选择是否要为每个SettingsType接收电子邮件和短信。

        我将Entity Framework 4.1与CodeFirst一起使用,普通页面将返回表格对象,如下所示:

        public ActionResult Index()
            {
                var settings = db.Settings.Include(s => s.SettingsType);
                return View(settings.ToList());
            }
        

        include语句进行内连接,不返回与Setting相关的所有SettingsType。

        如何编写代码以进行左连接或右连接,并获得正确的模型以传递到我的视图中:

        @model IEnumerable<TenderSystem.Models.Setting>
        
        @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.SettingsType.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.IsEmailActivated)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.IsSMSActivated)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.IntervalNotification)
            </td>
        </tr>}
        

        我尝试了很多像这样的链接:

        1. Entity Framework Code First Left Join
        2. Fluent API Samples
        3. 但我无法达到我的期望。

          总而言之,我还使用SQL到LINQ转换器工具将我非常简单的SQL左连接转换为LINQ,并且可以将我可以使用的对象返回到我的视图中但是我得到了这个错误:只支持无参数构造函数和初始化器在LINQ to Entities。

          需要你的帮助来了解处理这种情况的正确方法。

          非常感谢

1 个答案:

答案 0 :(得分:1)

我认为Include可以只是孩子的模型名称,作为其中一个构造函数下的字符串。这是EF5的链接。

http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k( “System.Data.Entity.Infrastructure.DbQuery`1.Include”); K(包含); K(TargetFrameworkMoniker-.NETFramework,版本%3Dv4.5); K(DevLang-CSHARP )及RD =真

或缩短...... http://bit.ly/SOEttF

我正在使用WebAPI,因此返回需要IQueryable,这对我有用。

    [AcceptVerbs("GET")]
    public IQueryable<Run> Runs()
    {
        var rx  = _contextProvider.Context.Runs
            .Include("RunOutlineItems")
            .AsQueryable()
            .Where(r => r.RunStatusId < 4);

        return rx;
    }

也检查这个答案 Join and Include in Entity Framework