【问题标题】:Trouble converting a bit of TSQL to LINQ to Entities将一些 TSQL 转换为 LINQ 到实体时遇到问题
【发布时间】:2010-08-12 00:20:34
【问题描述】:

抱歉标题含糊不清,不知道我应该使用什么措辞。我有一个类似的查询(重新工作以节省空间):

SELECT
    *
FROM
    Publishers p
    INNER JOIN Authors a
        ON p.AuthorID = a.AuthorID
    INNER JOIN Books b
        ON a.BookID = b.BookID
WHERE
    p.PublisherName = 'Foo'
ORDER BY
    b.PublicationDate DESC

我试着改写成这样:

var query =
    from publisher in ctx.Publishers
    from author in publisher.Authors
    from books in author.Books
    ...

但出现以下错误:

    Error   1   An expression of type 'Models.Books' is not allowed in a 
    subsequent from clause in a query expression with source type
    'System.Linq.IQueryable<AnonymousType#1>'.  Type inference failed in the
    call to 'SelectMany'.

我可以像在 SQL 中那样,通过加入表来重新编写 LINQ 以使其工作,但我认为我可以通过它们的关系完成我想做的事情 - 我只是有点困惑为什么我可以获取 publisher.Authors,但不能获取 author.Books。

【问题讨论】:

  • 你知道,这实际上对我有用。你能透露一下 LINQ 查询的其余部分吗?我感觉罪魁祸首在那里。

标签: c# linq linq-to-entities


【解决方案1】:

检查您的数据库中是否存在从 Authors 到 Books 的关系。

【讨论】:

    【解决方案2】:

    试试这个...

    var result = (from pItem in ctx.Publishers
    join aItem in ctx.Authors on pItem.AuthorId equals aItem.AuthorId
    join bItem in ctx.Books on pItem.BookId equals bItem.BookId
    where pItem.PublisherName== "Foo"
    select new {
    // Fields you want to select
     }
    ).ToList();
    

    我不知道这些表的确切关系,但你可以从这个中得到一个想法。

    【讨论】:

      猜你喜欢
      • 2016-01-20
      • 2016-08-13
      • 2015-05-11
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      相关资源
      最近更新 更多