错误:LINQ to Entities无法识别该方法

时间:2013-06-07 17:16:19

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

我在使用此linq查询时遇到以下错误:

LINQ to Entities无法识别方法'System.Collections.Generic.List 1[System.Char] ToList[Char](System.Collections.Generic.IEnumerable 1 [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; }
}

提前致谢。

2 个答案:

答案 0 :(得分:0)

我建议像这样修改你的代码(注意现在如何初始化 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)),
    }
);

答案 1 :(得分:0)

如果您将IList<char> authors中的CitationViewModel属性更改为

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

然后移除投影中的ToList()来电。 SelectMany(b => b.Author.AuthorName)会返回IEnumerable<string>