如何从第二个表中获取多个记录基于第一个表中的记录列表使用EF

时间:2016-04-07 09:30:56

标签: c# entity-framework

我在Sql数据库中有两个表,比如Users和UserEducation表。 用户表中有多个记录,每个用户在UserEducation表中有一条记录。我想通过加入这两个表来显示网格视图中的所有记录?我怎样才能使用Entity Framework?

4 个答案:

答案 0 :(得分:1)

您只需使用User中的navigationproperty:

即可
var user = new User();
user.UserEducation.[Property];

答案 1 :(得分:1)

因为有一对一的映射,我宁愿制作一个表。但具体来说你可以这样:

entityframeworkContext obj = new entityframeworkContext(); 列出xyz = obj.database.SqlQuery(“选择u.fieldname1作为modeltablefield1,u.fieldname2作为modeltablefield2,ued.fieldname1作为modeltablefield3,ued.fieldname2作为modeltablefield4来自用户u内部加入UserEducation ued on u.commonfield = ued.commonfield” );

这里的常用字段将是第二个表中的外键 模型表是组合查询中所需的任何逻辑表(特定于MVC)希望它适合您!!

答案 2 :(得分:1)

我创建了一个控制台应用程序来满足您的使用案例。您必须将此代码重用到您希望将输出绑定到网格视图的Windows窗体或基于Web的应用程序中。我假设POCO课程中有一些属性,您可以随时根据您为用户和教育实体保存的所有值来修改它们。我的代码片段中没有提到任何连接字符串。如果您没有提及连接字符串,实体框架会自动连接到计算机上的sql express数据库,或者它将连接到您在app.config或web.config文件中提到连接字符串的数据库。希望这有帮助!

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

namespace UsersCodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new EfContext())
            {
                // Display all users with their education from the database 
                var query = from user in db.Users 
                           join userEducation in db.UserEducations
                           on user.UserId equals userEducation.UserId
                    orderby user.Name
                    select new
                    {
                        Name = user.Name,
                        UserEducation = userEducation.CourseName
                    };

                //bind to grid by setting grid data source to query.ToList()
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }

    public class User
    {
        public string UserId { get; set; }
        public string Name { get; set; }
        public virtual List<Education> Posts { get; set; }
    }

    public class Education
    {
        public string EducationId { get; set; }
        public string CourseName { get; set; }
        public string UserId { get; set; }
    }

    public class EfContext : DbContext
    {
        public DbSet<Education> UserEducations { get; set; }
        public DbSet<User> Users { get; set; }
    }
}

您需要将Entity Framework nuget包添加到项目中以获取对DbContext类的引用。

答案 3 :(得分:0)

或使用Linq实体并连接表:

using ( var context = new YourContext)
   {
     var users = context.UserDbSet;
     var userEdications = context.UserEdication.DbSet ;

     var joinedTables =  from user in users
                         join userEdication in userEdications on user.userId  = userEdication.userId 
                         select new OutPutEntity
                         {
                               Name = user.Name,
                               Edication = userEdication.Edication
                         }

                         gridView.DataSource = joinedTables.toList(); // should be placed outside the using. (here just as a sample)
   }

优点 - 您可以在IQurable级别指定输出格式。下行 - 看起来很复杂。