Ich habe den folgenden Code:LinqToSql seltsames Verhalten
var tagToPosts = (from t2p in dataContext.TagToPosts
join t in dataContext.Tags on t2p.TagId equals t.Id
select new { t2p.Id, t.Name });
//IQueryable tag2postsToDelete;
foreach (Tag tag in tags)
{
Debug.WriteLine(tag);
tagToPosts = tagToPosts.Where(t => t.Name != tag.Name);
}
IQueryable tagToPostsToDelete = (from t2p in dataContext.TagToPosts
join del in tagToPosts on t2p.Id equals del.Id
select t2p);
dataContext.TagToPosts.DeleteAllOnSubmit(tagToPostsToDelete);
wo tags
eine List<Tag>
- Stichwortliste Konstruktor erstellt, so haben sie keine ID. Ich führe den Code aus, setze einen Brems-Punkt mit Debug in Verbindung und warte auf ein paar Zyklen. Dann setze ich tagToPosts.ToList() in das Watch-Fenster, damit die Abfrage ausgeführt wird. In SQL Profiler kann ich die folgende Abfrage sehen:
exec sp_executesql N'SELECT [t0].[Id], [t1].[Name]
FROM [dbo].[tblTagToPost] AS [t0]
INNER JOIN [dbo].[tblTags] AS [t1] ON [t0].[TagId] = [t1].[Id]
WHERE ([t1].[Name] @p0) AND ([t1].[Name] @p1) AND ([t1].[Name] @p2)',N'@p0 nvarchar(4),@p1 nvarchar(4),@p2 nvarchar(4)',@p0=N'tag3',@p1=N'tag3',@p2=N'tag3'
Wir alle Parameter Parameter sehen den Wert des letzten tag.Name
in einem Zyklus haben. Haben Sie eine Idee, wie Sie dies erreichen können und bekommen Zyklus Where
mit neuen Bedingungen jeden Tymus hinzufügen? Ich kann sehen, dass IQueryable vor der Ausführung nur Zeiger auf die Variable speichert.