2016-05-19 8 views
0

ここで最初に検索してみましたが、おそらくすでにそこにあるにもかかわらず、回答が見つかりませんでした。インポートされたクラスをSQLテーブルから型キャストする方法

私はLINQを使用して、プロジェクト用に作成しているログインシステム用のdbテーブルからユーザーを取得しています。

具体的なコードは次のとおりです。

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); } 
    } 
    } 

public User GetUser(string username) 
    { 
     var user = from x in db.User 
        where x.Login == username 
        select x; 

     return (User)user; 
    } 

問題は明らかに、私は(ユーザー)として出力を型キャストすることは許されないのです

Userクラスは次のように定義されていることです

これを解決するために必要な情報はもうありませんか?

編集:与えられた特定のエラーは、次のとおりです。

型「System.InvalidCastExceptionの」の未処理の例外はProjektBlodbank.exe

で発生した

追加情報:型「System.Data.Linqのオブジェクト。 DataQuery`1 [ProjektBlodbank.Business.User] 'は、' ProjektBlodbank.Business.User 'タイプに変換することはできません。

+0

明らかに、 'db.User'に含まれる型はあなたが示した' User'クラスではありません。その代わりにどんなタイプですか? –

+0

db.Userは上記の列を含む私のdbのテーブルです... – Dunark

+0

ああ、心配しないで、MarkoとWaznerが正しいです。 –

答えて

1

LINQは、ログインがユーザーを一意にすることを知らないため、実行するクエリはIQueryable<User>を返します。つまり、クエリで複数のユーザーが返される可能性があります。以下は、あなたの問題に対する解決策です。

あなたが特定の1行のみが返されている場合、ユーザーが常に
存在する場合は、次のようにあなたがあなたのキャストを行うことができます。ユーザーが存在する可能性がある

return user.Single(); 

場合、それは定かではないのです。
不明な点がある場合:たとえば、ユーザーが存在しない場合は、SingleOrDefaultを使用します。

return user.SingleOrDefault(); 

ユーザーが見つからなかった場合、これはnullを返します。

0

完全な色ではなく、1つだけを選択してください。

public User GetUser(string username) 
{ 
    var user = (from x in db.User 
       where x.Login == username 
       select x).SingleOrDefault(); 

    return (User)user; 
} 
+0

ユーザが存在しない場合、これは 'Exception'をスローします。 – Wazner

0

これを試してください。

public User GetUser(string username) 
    { 
     var user = (from x in db.User 
        where x.Login == username 
        select x).FirstOrDefault(); 

     return (User)user; 
    } 
関連する問題