Jak zrobiÄ ‡ zĹ ' Ä ... czenia w Linq przy uĹźyciu lambda i Drzewa wyrazăłw?
Próbuję wykonać JOIN w Linq używając wyrażeń lambda ... i napotkać pewne problemy.
Mam dwa byty, komentarze i komentarze. Komentarze źródła są powiązane z komentarzami. Mam następujący kod, który działa:
01 IQueryable<Data.Comment> query = ctx.DataContext.Comments;
02
03
04 if (criteria.IsDeleted == DeletedFilter.Deleted)
05 query = query.Where(row => row.DeletedBy != Guid.Empty);
06 else if (criteria.IsDeleted == DeletedFilter.NotDeleted)
07 query = query.Where(row => row.DeletedBy == Guid.Empty);
08
09 var data = query.Select(row => CommentInfo.FetchCommentInfo(row));
Muszę dołączyć komentarze do Komentarzy w polu, a chciałbym użyć, jeśli to możliwe, coś w stylu:
01 query = query.Join(join code goes here)
Jak mogę to zrobić używając lambda w drzewie wyrażeń?
Jeszcze jedno ... jak Dodaję gdzie do oświadczenia Join?
Zamiast zadawać kolejne pytanie ... jak zrobić klauzulę Where na tym połączeniu? Na przykład, mam pole o nazwie SourceId na CommentSource, które chciałbym filtrować według. 9
2 answers
Musisz podać pięć rzeczy (co najmniej):
- Sekwencja "zewnętrzna" (Komentarze) (Jest to pierwszy parametr)
- Sekwencja "wewnętrzna "(CommentSource)
- Jak dostać się z komentarza do klucza
- Jak dostać się z komentarza do klucza
- jaki ma być wynik dla pary komentarzy/komentarzy
Na przykład:
query = query.Join(ctx.DataContext.CommentSource,
comment => comment.CommentSourceId,
commentSource => commentSource.Id,
(comment, commentSource)
=> new { Comment=comment, CommentSource=commentSource });
15
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 14:57:29
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 14:57:29
Oto mój ostatni kod:
var query = ctx.DataContext.Comments.Join(ctx.DataContext.CommentSources,
c => c.CommentId,
s => s.CommentId,
(c, s) => new {Comment = c, CommentSource = s});
if (criteria.SourceId != null && criteria.SourceId != Guid.Empty)
query = query.Where(row => row.CommentSource.SourceId == criteria.SourceId);
if (criteria.IsDeleted == DeletedFilter.Deleted)
query = query.Where(row => row.Comment.DeletedBy != Guid.Empty);
else if (criteria.IsDeleted == DeletedFilter.NotDeleted)
query = query.Where(row => row.Comment.DeletedBy == Guid.Empty);
var data = query.Select(row => CommentInfo.FetchCommentInfo(row.Comment));
5
Author: mattruma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 15:31:02
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-06 15:31:02