2
我的目標是能夠添加標籤到一個項目,我應該能夠傳遞標籤名稱的CSV字符串,並且如果項目尚未鏈接到標籤,那麼它將被鏈接。中提前LINQ/EntityFramework查詢問題。標籤項目
我的代碼就像你在這封郵件底部看到的一樣,但我想知道這是否是最有效的方式。這可以用更少的查詢來完成嗎?
一個小數據庫方案信息:
3個表: 標籤,TaggedItems,則contentType
標籤表有:名稱,標籤識別
TaggedItems表有:標籤識別,ContentTypeID,ContentTypePrimaryKey
ContentType表具有:ContentTypeID,名稱
該項是標籤名稱的列表,並且內容類型對象已經過去到方法 ,並且只要列表中的標籤尚未鏈接到內容類型對象(即,在taggedItems表中)然後添加它。
public void AssignTagsByNameToContentType(string csvOfTagNames, IContentType contentObject)
{
string[] tags = csvOfTagNames.Split(',');
//get me all the tags that hav been linked to this content object already (call to the DB:()
var existingTags = GetTagsForContentType(contentObject);
//filter out the tags past that are already linked to this content object (call to the DB :()
var newTags = from t in tags
where !(from et in existingTags
select et.Name)
.Contains(t)
select t;
//add the new tags to the content object, multiple calls to the DB :(
foreach (var newTag in newTags)
{
taggedItemsRepo.SaveTaggedItem(new TaggedItem() {
ContentObjectPK = contentObject.ID,
ContentTypeID = GetContentTypeIDFromSession(contentObject),
TagID = tagsRepo.GetTagByName(newTag)
);
}
}
這是一個非常有效的點,我已經實施了你的建議。我重新編寫了代碼,現在我正在分析它。我會很快發佈。 – Mike 2011-02-23 22:18:25