0

私はvs2010を使用しており、以下に示すSQLステートメントを持っています

select deptId, deptName, Detail from lkDept where deptId in (select deptId from lkDeptLinks where userRef in (select ref from lkUsers where userId = @userId)) order by deptName

上記をlinqステートメントに変換する必要があります。ラムダがいいでしょう

すべてのテーブルは dbml にあります

これは私がこれまでに持っていた混乱です、明らかにうまくいきません

var queryUsers = dc.lkUsers.Where(p => p.UserID == userId);
var queryLinks = dc.lkDeptLinks.Where(p => queryUsers.ref.contains(p.ref));
var queryDept = dc.lkDepts.Where(p => queryLinks.deptid.contains(p.deptid));

どんな助けでも感謝し、事前に感謝します


わかりました、助けてくれてありがとう、私はこのようなものになりました

  using (var dc = new myDataContext(DB.GetConnectionString()))
  {
      var queryUsers = dc.lkUsers.Where(p => p.UserID == userId).Select(p => p.@ref); 
      var queryLinks = dc.lkDeptLinks.Where(p => queryUsers.Any(x => p.UserRef  == x )).Select(p => p.DeptId);
      var queryDept = dc.lkDepts.Where(p => queryLinks.Any(x => p.DeptID == x)).OrderBy(p => p.deptName).Select(p => new SLDepartment(p));

      if (queryDept.Any())
        return new SLDepartments(queryDept);

  }

コンストラクター、SlDepartment(lkDept dept) および SlDepartments(IEnumerable collection) に注意してください。これは LINQ を操作する適切な方法ですか?

私が見逃している可能性のある問題、つまり、上記またはソリューション全体での例外またはパフォーマンスの問題の可能性はありますか?

4

1 に答える 1

1

あなたの試みは正しいように見えますが、変更する必要があります-> Anyが含まれ、また不完全です:

var queryUsers = dc.lkUsers.Where(p => p.UserID == userId);
var queryLinks = dc.lkDeptLinks.Where(p => queryUsers.ref.Any(x=>x== p));
var queryDept = dc.lkDepts.Where(p => queryLinks.deptid.Any(x=> x == p.deptid));
return  queryDept
        .Select(x=>new {ID = x.deptId, Name = x.deptName, Detail = x.Detail})
        .ToList();
于 2012-08-21T00:51:32.410 に答える