我尝试创建一个Lambda表达式来获取特定应用程序中文件夹中的每个Case。 我有2张桌子:
表1:案例
CaseId | FolderId | CaseContent
0 1 "blap"
1 2 "blop"
2 1 "blup"
3 3 "blip"
table2:文件夹
FolderId | ApplicationId
0 1
1 1
2 1
3 2
我想在ApplicationId 1的文件夹中返回每个案例。
结果:
CaseId | FolderId | CaseContent
0 1 "blap"
1 2 "blop"
2 1 "blup"
我在这里找到了一个很好的Join表达式示例: http://www.c-sharpcorner.com/UploadFile/54db21/inner-join-using-linq-with-lambda/
我不能使用它的原因是它返回两个表中的内容
var query = objEntities.Employee.Join(objEntities.Department, r => r.EmpId, p => p.EmpId, (r,p) => new{r.FirstName, r.LastName, p.DepartmentName});
所以而不是
(r,p) => new{r.FirstName, r.LastName, p.DepartmentName}
我想让它归还整个' r'并没有' p'。
我尝试了
的内容IQueryable<Case> cases = Cases.Join(Folders, f => f.Folder.folderId, c => c.folderId, (c) => c);
有人说它不起作用。 :(
提前致谢!!
答案 0 :(得分:1)
你有几种方法可以做到这一点。
但要让你的联接表达正确,你需要
IQueryable<Case> cases //line:#1
= Cases.Join(Folders.Where(f => f.ApplicationId == 1), //line:#2
c => c.folderId, //line:#3
f => f.folderId, //line:#4
(f,c) => c); //line:#5
说明:
.Join有四个参数。 (有关完整说明,请参阅MSDN)
.Where(f => f.ApplicationId == 1)
我经常喜欢使用linq表达式,但是:
var query = from c in Cases
join f in Folders on c.FolderId equals f.FolderId
where f.ApplicationId == 1
select c;
认为这更具可读性!