【问题标题】:Error: LINQ to Entities does not recognize the method错误:LINQ to Entities 无法识别该方法
【发布时间】:2013-06-04 02:03:24
【问题描述】:

这个 linq 查询出现以下错误:

LINQ to Entities 无法识别方法 'System.Collections.Generic.List1[System.Char] ToList[Char](System.Collections.Generic.IEnumerable1[System.Char])' 方法,并且该方法无法转换为存储表达式。

var result =
(
    from citation in Db.Citation
    where citation.IsActive == true
    select new CitationViewModel
    {
        CitationID = citation.CitationID,
        CitationTitle = citation.CitationTitle,
        DocType = citation.DocType,
        DateOfPub = citation.DateOfPub,
        authors = citation.citation_Authors.Where(c => c.CitationID == citation.CitationID).SelectMany(b => b.Author.AuthorName).ToList(),
    }
);

这是我的视图模型:

public class CitationViewModel
{
    public int CitationID { get; set; }
    public string CitationTitle { get; set; }
    public IList<char> authors { get; set; }
}

提前致谢。

【问题讨论】:

  • 你有什么办法解决这个问题?

标签: c# asp.net-mvc linq entity-framework-4


【解决方案1】:

我建议像这样修改您的代码(注意 authors 属性现在是如何初始化的):

var result =
(
    from citation in Db.Citation
    where citation.IsActive == true
    select new CitationViewModel
    {
        CitationID = citation.CitationID,
        CitationTitle = citation.CitationTitle,
        DocType = citation.DocType,
        DateOfPub = citation.DateOfPub,
        authors = new List<char>(citation.citation_Authors.Where(c => c.CitationID == citation.CitationID).SelectMany(b => b.Author.AuthorName)),
    }
);

【讨论】:

    【解决方案2】:

    如果您将CitationViewModel 中的IList&lt;char&gt; authors 属性更改为

    ,则可以解决此问题
    public IEnumerable<string> authors { get; set; }
    

    然后删除投影中的ToList() 调用。 SelectMany(b =&gt; b.Author.AuthorName) 返回一个 IEnumerable&lt;string&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-06
      相关资源
      最近更新 更多