请在下面找到我的查询。我试着运行以下查询。但是由于在Select子句中选择了List对象,因此查询抛出异常。
错误是:
LINQ to Entities无法识别方法'System.Collections.Generic.List 1[TagList] ToList[KBTag](System.Collections.Generic.IEnumerable
1 [TagList])'方法,并且此方法无法转换为商店表达式。
//KBArticle class
public class KBArticle{
public int ArticleId{get;set;}
public ControlId{get;set;}
public List<TagList> Tags {get;set;}
}
//TagList class
public class TagList
{
public int TagId{get;set;}
public string Name{get;set;}
}
public List<KBArticle> GetArticleList(List<int> controlIds)
{
using (var entity= new DBContext())
{
var kbArticleList = (from article in entity.Article
where controlIds.Contains(article.ControlId)
join control in entity.SU_Control on article.ControlId equals control.ControlId
where article.IsActive &&control.IsActive
select new KBArtcle{
ArtcleId=article.ArticleId,
ControlId=control.ControlId,
Tags=(from Tag in entity.KbTag where tag.artcleId==article.ArtcileId
Select new TagList{
TagId=Tag.Id,
TagName=Tag.Name
}).ToList()
}).ToList();
return kbArticleList;
}
}
您能否为上述查询提供有效的解决方案。我在对象列表中选择了对象列表。是否有可能在LinQ。
答案 0 :(得分:1)
.ToList()
无法应用于inner queries
,您可以使用AsEnumerable()
代替,尝试此操作:
Tags = (from Tag in entity.KbTag where tag.artcleId==article.ArtcileId
Select new TagList{
TagId=Tag.Id,
TagName=Tag.Name
})
.AsEnumerable()
而不是内部查询来填充tags
属性。