如何将Model.Tag(具有Id和名称)转换为“名称列表”?

时间:2010-06-26 12:17:48

标签: c# asp.net asp.net-mvc linq

public List<string> TagNameList (int objectId)
{
    List<string> tagNameList = db.Tags.Where(ob => ob.Id == objectId).ToList();  
}

db.Tags.Where(ob => ob.Id == objectId).ToList(); 

我将进入db中的Tags上下文,我通过{{1}设置的导航属性选择所有具有集合objectId的标记将关系存储在两列中的表,都构成一个复合键。

示例返回ObjectTags。有没有快速的方法可以将其转换为只有IQueryable<app.Models.Tag>的{​​{1}}?

2 个答案:

答案 0 :(得分:5)

是的,你只需要使用Select来应用投影:

public List<string> TagNameList (int objectId)
{
    return db.Tags.Where(ob => ob.Id == objectId)
                  .Select(tag => tag.Name)
                  .ToList();  
}

编辑:好的,鉴于您的更新,如果您只想要每个集合中的第一个对象,则可以使用First() - 如果您想要集合中每个对象的名称,那么可以使用SelectMany

public List<string> TagNameList (int objectId)
{
    return db.Tags.Where(ob => ob.Id == objectId)
                  .SelectMany(ob => ob.Tags)
                  .Select(tag => tag.Name)
                  .ToList();  
}

答案 1 :(得分:0)

感谢好朋友找到解决方案。

db.Objects.Where(ob => ob.Id == objectId).First().Tags.Select(t => t.TagName).ToList()

First()对于将其“缩小”为一个对象然后导航到另一个对象至关重要。

这太酷了。你可以导航到这样的数十个表。我想知道你是否可以用这种方式编写最长的代码行:D