我试着先在这里搜索,但我找不到答案,即使它可能已经在那里了。
我正在使用LINQ从db表中获取一个类用户,用于我为项目创建的登录系统。
具体代码是:
public User GetUser(string username)
{
var user = from x in db.User
where x.Login == username
select x;
return (User)user;
}
问题是显然我不允许将输出强制转换为(用户)
User类定义为:
class User
{
EntitySet<Donation> donationList = new EntitySet<Donation>();
EntityRef<Totals> totals = new EntityRef<Totals>();
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int UserId { get; set; }
[Column]
public string Firstname {get; set;}
[Column]
public string Lastname { get; set; }
[Column]
public string Streetname { get; set; }
[Column]
public string City { get; set; }
[Column]
public int ZipCode { get; set; }
[Column]
public int CPRNumber { get; set; }
[Column]
public string Login { get; set; }
[Column]
public string Password { get; set; }
[Column]
public string Bloodtype { get; set; }
[Column]
public string Email { get; set; }
[Column]
public int PhoneNumber { get; set; }
[Column]
public DateTime NextPlasmaDonation { get; set; }
[Column]
public DateTime NextWholeBloodDonation { get; set; }
[Association(Name = "User_Donation", IsForeignKey = true, Storage="donationList", ThisKey = "UserId", OtherKey = "UserId")]
public ICollection<Donation> DonationList
{
get { return this.donationList; }
set { this.donationList.Assign(value); }
}
}
是否需要更多信息来帮助我解决这个问题?
编辑:给出的具体错误是:
ProjektBlodbank.exe中发生未处理的“System.InvalidCastException”类型异常
其他信息:“System.Data.Linq.DataQuery`1 [ProjektBlodbank.Business.User]”类型的对象无法转换为“ProjektBlodbank.Business.User”类型。
答案 0 :(得分:1)
LINQ不知道Login使用户唯一,因此您执行的查询将返回IQueryable<User>
。这意味着查询可能会返回多个用户。以下是您的问题的可能解决方案。
如果用户将永远存在
如果您确定只返回了1行,则可以执行以下操作:
return user.Single();
如果用户可能存在,但不确定。
如果您不确定:例如,用户可能不存在,您可能希望使用SingleOrDefault
。
return user.SingleOrDefault();
如果找不到用户,则会返回null
。
答案 1 :(得分:0)
只选择一个,而不是完整的colletction。
public User GetUser(string username)
{
var user = (from x in db.User
where x.Login == username
select x).SingleOrDefault();
return (User)user;
}
答案 2 :(得分:0)
试试这个;
public User GetUser(string username)
{
var user = (from x in db.User
where x.Login == username
select x).FirstOrDefault();
return (User)user;
}