【问题标题】:How to make the Linq Query as efficient when select list inside the another select list在另一个选择列表中选择列表时如何使 Linq 查询高效
【发布时间】:2014-02-27 02:50:14
【问题描述】:

请在下面找到我的查询。我试图在下面的查询中运行这个。但是由于在 Select 子句中有 select List of object,查询会抛出异常。

错误是: LINQ to Entities 无法识别方法 'System.Collections.Generic.List1[TagList] ToList[KBTag](System.Collections.Generic.IEnumerable1[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中是否可以。

【问题讨论】:

    标签: linq c#-4.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 属性。

    【讨论】:

    • 你能不能更新原因,为什么 List() 不在内部查询中
    • ToList() 将无法转换为SQL query,在linq to entity 查询中,您可以只使用可以转换为sql 查询的方法,例如,您不能使用@ DateTime 的 987654329@ 属性,但您可以改用 EntityFunctions.TruncateTime,因为它可以转换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2021-12-30
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多