LINQ to ADO.net实体

时间:2011-01-21 14:32:14

标签: linq-to-entities ado.net-entity-data-model

这是我第一次使用实体,我通常使用存储过程。我正在使用Ado.net实体,在db上我有文件夹表,其中包含id,name和bookmarks表,其中包含folderid,name,url

我可以使用

获取文件夹名称
protected IEnumerable<folder> GetFolderList()
{
    using (DBEntities db = new DBEntities())
    {
        var folderList = from f in db.folders where f.userId == userid select f;
        return folderList.ToList();
    }
}

并用

打印
    <%foreach (BookmarksDBModel.folder f in folderList){%>
    <option value="<%=f.id %>"><%=f.name %></option>
    <%}%>

我想在每个文件夹中获取书签数量,所以我写了

var folderList = from f in db.folders
                    where f.userId == userid
                    select new
                    {
                       linkcount = (from b in db.bookmarks where b.folderId == f.id select b).Count(),
                       f.name,
                       f.id
                    };

问题是文件夹类没有名为linkcount的属性。 我需要做什么才能获得linkcount?我是否需要向文件夹类添加另一个属性?

1 个答案:

答案 0 :(得分:0)

在你的查询中,你实际上是在返回一个匿名类型,所以你可以写:

var folderList = from f in db.folders
                where f.userId == userid
                select new
                {
                   linkcount = (from b in db.bookmarks where b.folderId == f.id select b).Count(),
                   folder = f
                };

您可以通过以下方式访问信息:

foreach(var folderResult in folderList)
{
  Console.WriteLine("FolderId: " + folderResult.folder.id + ", Count: " + folderResult.linkcount);
}