2017-01-10 6 views
0

「プロパティまたはインデクサがに割り当てることができません - それは読まれているだけ」デシベルのレコードを更新する場合にのみお読み

どれも実際に私を助けているように見えるんけれども、私は同様の質問の多くを参照してください。

私のデータベースの一部の行を更新しています。

最初私は私のデータを呼び出します。

var projects = (from p in _ProjectRep.GetAll() 
         join cl in _ClientRepo.GetAll() on p.ClientID equals cl.ClientID 
         where p.IsOpen == true && p.Tasks.Any(t => t.TimeEntries.Any(te => te.DateEntity >= dateLimit)) == false && p.Tasks.Any(te => te.TimeEntries.Any()) 
         select new { 
          TickProjectID = p.TickProjectID, 
          ClientName = cl.ClientName, 
          ProjectName = p.ProjectName, 
          IsOpen = p.IsOpen, 
          DateClosed = p.DateClosed 
         }).ToList(); 

その後、私はそのデータをループしてみてください、そしてそれらのレコードの特定のフィールドを更新します。

foreach (var item in projects) 
     {// Update projects to closed. 
      item.IsOpen = false; 
      item.DateClosed = DateTime.Now; 
     } 

最後にデータを保存...

// updates changes to OUR db. 
    var affectedCount = _UnitOfWork.SaveChanges(); 

しかし、私はそのエラーを得続ける、と私はそれについて何をするか分かりません。 私はそれを読むことができるものはget/setについてですが、私はそれらのどれも持っていません。 と私はなぜそれらがnessesaryでなければならないのですか?

誰かが私に役立つかもしれない明確な解決策を与えることを願っています。

編集

private readonly ProjectRepository _ProjectRep; 

_ProjectRep = new ProjectRepository(unitOfWork); 
+0

'_ProjectRep'クラスの定義を含めることは可能ですか? –

+0

@ un-luckyは私がそれをどこで呼んだかを追加しました。 – andrelange91

+0

'_ProjectRep'は読み取り専用として定義されていますので、 –

答えて

1
var projects = (from p in _ProjectRep.GetAll() 
        join cl in _ClientRepo.GetAll() on p.ClientID equals cl.ClientID 
        where p.IsOpen == true && p.Tasks.Any(t => t.TimeEntries.Any(te => te.DateEntity >= dateLimit)) == false && p.Tasks.Any(te => te.TimeEntries.Any()) 
        select p).ToList(); 

これを試してください。あなたのコードの問題は、匿名型(新しい{...}を使って作成)で作業しているということです。このタイプは変更追跡のようなものを知らず、そのプロパティは読み取り専用なので、このタイプを使用してデータベースへの変更を保存することはできません。

+0

これは確かに私が知ったものです。ちょうどpの代わりに、Project = p、ClientName = cl.Clientnameで新しい情報を追加しました。なぜなら、私はその情報も必要としていたからです。 – andrelange91

0

私のSQLの呼び出しは匿名だったようで、そのためには、それが何であったか知りませんでした。

は私が私のSQLの呼び出しは

var projects = (from p in _ProjectRep.GetAll() 
         join cl in _ClientRepo.GetAll() on p.ClientID equals cl.ClientID 
         where p.IsOpen == true && p.Tasks.Any(t => t.TimeEntries.Any(te => te.DateEntity >= dateLimit)) == false && p.Tasks.Any(te => te.TimeEntries.Any()) 
         select new { 
          Project = p, 
          ClientName = cl.ClientName 

         }).ToList(); 

を選択変更して、私はちょうど呼び出す必要があります「プロジェクト。{何か}」私はデータを選択したいとき。このような

:全部の作品を作った

foreach (var item in projects) 
     {// Update projects to closed. 
      item.Project.IsOpen = false; 
      item.Project.DateClosed = DateTime.Now; 
     } 

関連する問題