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}}?
答案 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