从实体框架

时间:2017-07-27 09:05:54

标签: asp.net-mvc entity-framework linq asp.net-web-api

我在Sql-Server中有五个表,并且使用外键进行链接。

下面我将显示数据库表和链接的图像。

例如,我试图从用户表中获取特定用户ID的用户数据,我将所有具有内部联接的行添加到所有五个表中。

但我只需要来自User表的数据。我试着编写查询,sql程序和Linq。

总之,我得到的数据与所有五个表格相结合。

如何只从一个表中获取数据?

我尝试使用过程,

       object[] xparams = {
        new SqlParameter("@UserName", "Admin"),
        new SqlParameter("@UserPwd", "1234"),
        new SqlParameter("@AppType", 1)

        };
    var user = db.Database.ExecuteSqlCommand("exec proc_authenticate_tocken @UserName, @UserPwd, @AppType ", xparams);

另一个使用Query,

db.Users.SqlQuery("select * from users where PhoneNumber ='"+ user_name + "' and   Password = '" + password + "' and TypeId=" + user_type + " and Status = 1;").ToList();

Lsing Linq,

var ty = db.Users.Where(emp => emp.Password == password && 
        emp.PhoneNumber == phone_number)
                           ;

Table

下面的代码是实体模型类,使用实体框架自动生成。

 public partial class User
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public User()
    {
        this.TockenPools = new HashSet<TockenPool>();
        this.TockenProcesses = new HashSet<TockenProcess>();
    }

    public int Id { get; set; }
    public Nullable<int> TypeId { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string PhoneNumber { get; set; }
    public string ActualName { get; set; }
    public Nullable<System.DateTime> LastLogin { get; set; }
    public Nullable<int> LoginCount { get; set; }
    public Nullable<int> Status { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<TockenPool> TockenPools { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<TockenProcess> TockenProcesses { get; set; }
    public virtual User Users1 { get; set; }
    public virtual User User1 { get; set; }
    public virtual UserType UserType { get; set; }
}

2 个答案:

答案 0 :(得分:0)

嗨根据我对您的问题的理解,您只需要来自users表的数据。所以请尝试以下代码,

var SelectedUser = db.Users.Where(emp => emp.Password == password && 
    emp.PhoneNumber == phone_number).select(usr => new User{UserName =  usr.UserName , Password = usr.Password }).FisrtOrDefault();

同样明智地,您可以包含与您的user

相关的任何内容

答案 1 :(得分:0)

在My Context中,我设法使用LINQ本身获得结果

But i am not so sure that this is a good practice or not, since the 
  

ObjUser对象通过连接digram中的所有表来携带所有数据。

        var Result = from ObjUser in db.Users
                           where ((ObjUser.PhoneNumber == user_name ||
                           ObjUser.UserName == user_name) &&
        (ObjUser.Password == password))
                           select new
                           {
                               ObjUser.Id,
                               ObjUser.ActualName,

                               ObjUser.LastLogin,
                               ObjUser.PhoneNumber
                           };
        var ty = db.Users.Where(emp => emp.Password == password &&
        emp.PhoneNumber == user_name)
                           ;