2017-01-23 2 views
1

LINQクエリの結果をリストに変換しようとしていますが、今まで成功していません。LINQクエリ後にオブジェクトのリスト<>を取得できません

This is my action method : 

public ActionResult DisplayListOfRolesUser() 
{    
    string currentUserId = User.Identity.GetUserId();//get the id of the logged user 

    UserDetails userDetails = db.UsersDetails.Where(c => c.identtyUserId == currentUserId) 
    .FirstOrDefault(); 
    int UsrCompanyId = userDetails.CompanyId;//get the user's company 

    List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId) 
    .FirstOrDefault().ToList();//get all the work roles for the compnay. 

    //List<WorkRole> lst = WorkRolesQuery.ToList(); 

    return View(lst); 
} 

私はスタックオーバーフローから多くの回答を試みましたが、成功しませんでした。

現在List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).FirstOrDefault().ToList();

ToListメソッドは赤で下線が引かれ、それが「WorkRoleは」「ToListメソッド」の定義が含まれていないと言います。

私は単純にWorkRoleオブジェクトのリストを持っていますので、私はいくつかの形式で私のビューにそれらを表示することができます。

誰かが助けることができますか?ここで

は、同様に私のモデルである:

public class WorkRole 
{ 
    [Key] 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

    public int WorkRoleId { get; set; } 
    public string RoleName { get; set; } 
    public string RoleDescription { get; set; } 
    public int CompanyId { get; set; } 
    public virtual Company Company { get; set; } 
    public virtual ICollection<WorkRolesUsersDetails> WorkRolesUsersDetails { get; set; } 
} 

答えて

2

が、これはあなたが最初の(既存の場合は、そうでない場合はnull)、その後にしようと最初の項目を選択することを意味します。このことにより、

List<WorkRole> WorkRolesQuery = 
       db.WorkRoles 
       .Where(c => c.CompanyId == UsrCompanyId) 
       .FirstOrDefault() 
       .ToList(); 

この行を置き換えこの1つの項目をリストに変換します(失敗します)。 単にWhere()文の後ToList()を呼び出すには、それを行う必要があります。CompanyIdあなたUsrCompanyId、全体ではなく、リストに等しいタイプWorkRole

List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).ToList(); 
2

あなたが最初の要素(要素は1つだけ)FirstOrDefault()を呼び出して取得し、それをリストにキャストしてみてください。あなたが.FirstOrDefault().ToList();を呼び出すと

List<WorkRole> WorkRolesQuery = 
       db.WorkRoles 
       .Where(c => c.CompanyId == UsrCompanyId) 
       .ToList();  // without FirstOrDefault() 
2

FirstOrDefaultリターンだけで非常に最初のインスタンスを。だから、そのインスタンスにToListを呼び出すことはできません。私はあなたがFirstOrDefaultへの呼び出しを省略することができたとします

var WorkRolesQuery = db.WorkRoles 
    .Where(c => c.CompanyId == UsrCompanyId) 
    .ToList(); 
1

あなたが探しているものです...

List<WorkRole> WorkRolesQuery = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).ToList(); 

FirstOrDefaultは、単一のエンティティを返したよう。

1

ToList()FirstOrDefault()が1つのアイテムまたはnullを返すため、使用できません。複数のアイテムが返されることが予想される場合は、While()を使用してからToList()を使用し、FirstOrDefault()は使用しないでください。また

var WorkRoles = db.WorkRoles.Where(c => c.CompanyId == UsrCompanyId).ToList(); 

あなたがFirstOrDefault()を使用している場合は注意してください、あなたは単にWhere()を使用せずに状態を渡すことができます。

var WorkRole = db.WorkRoles.FirstOrDefault(c => c.CompanyId == UsrCompanyId); 
0

あなたは行うことができます。

List<WorkRole> WorkRolesQuery = new List<WorkRole>(db.WorkRoles 
.Where(c => c.CompanyId == UsrCompanyId)); 
関連する問題