如何在另一个选择列表中选择列表时使Linq查询有效

时间:2014-02-26 18:37:35

标签: linq c#-4.0

请在下面找到我的查询。我试着运行以下查询。但是由于在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。

1 个答案:

答案 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属性。