我在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)
;
下面的代码是实体模型类,使用实体框架自动生成。
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; }
}
答案 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)
;