如何从sql表中对类型进行类型转换

时间:2016-05-19 07:52:46

标签: c# linq

我试着先在这里搜索,但我找不到答案,即使它可能已经在那里了。

我正在使用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”类型。

3 个答案:

答案 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;
    }