1

私はlinqとlinqtoentityを初めて使用するため、仮定が間違っている可能性がありますが、L2EでDefaultIfEmptyを無意識のうちに使用しようとしています。

何らかの理由で、結果セットをリストに変換すると、Defaultifempty()が機能します。誤ってLinq領域にクロスオーバーしたかどうかはわかりません。以下のコードは機能しますが、誰かが理由を教えてもらえますか?そしてそれがうまく機能すれば、それは他の人々の助けになるでしょう。

var results = (from u in rv.tbl_user
              .Include("tbl_pics")
              .Include("tbl_area")
              .Include("tbl_province")
              .ToList()
              where u.tbl_province.idtbl_Province == prov
              select new { u.firstName, u.cellNumber,
                  u.tbl_area.Area, u.ID,u.tbl_province.Province_desc,
                  pic = (from p3 in u.tbl_pics
                        where p3.tbl_user.ID == u.ID
                        select p3.pic_path).DefaultIfEmpty("defaultpic.jpg").First())
                  }
              ).ToList(); 
4

1 に答える 1

2

これにより、フィルタリングせずに呼び出すため、必要以上に多くのデータが収集.ToList()れます。これは、データベースからすべての州を選択することを意味します

代わりにこれを考慮してください:

var results = (from u in rv.tbl_user 
               where u.tbl_province.idtbl_Province == prov 
               select new { 
                   u.firstName, 
                   u.cellNumber, 
                   u.tbl_area.Area,
                   u.ID,
                   u.tbl_province.Province_desc, 
                   pic = (from p3 in u.tbl_pics 
                          where p3.tbl_user.ID == u.ID 
                          select p3.pic_path).DefaultIfEmpty("defaultpic.jpg").First() 
               }).ToList();

質問に答えるに.DefaultIfEmptyは、クエリによって返される値を選択し、それがnullまたは空の場合は、パラメータとして渡された文字列/オブジェクトを選択します。"defaultpic.jpg"この場合。その後の最初のことは、列挙型(おそらく常に1つの要素のみで構成される)が単一のインスタンスに折りたたまれていることを確認することです。

于 2010-03-21T11:13:47.200 に答える