如何在linq查询中使用方法?

时间:2015-01-20 13:42:06

标签: c# linq entity-framework

这是我的查询

return (from l in Context.DctLink
        join t in Context.DctTabel on l.BType equals t.DocType
        join t2 in Context.DctTabel on l.TabelNr equals t2.TabelNr
        where l.AType == docType || l.AType == 0
        select new { t.TabelNr, t2.Naam, t.Titel })
     .Union(from l in Context.DctLink
        join t in Context.DctTabel on l.AType equals t.DocType
        join t2 in Context.DctTabel on l.TabelNr equals t2.TabelNr
        where l.BType == docType || l.BType == 0
        select new { t2.TabelNr, t2.Naam, t.Titel })
     .Join(Context.TimIcon.Where(q => q.Timweb && q.ShowId.ToInt32() > 0),
        x => x.TabelNr,
        y => y.TabelNr,
        (x, y) => new LookupItem
        {
           Id = x.TabelNr,
           Name = x.Titel,
           Tag = x.Naam
        }).ToList();

我希望能够做到q.ShowId.ToInt32() > 0。但我得到一个System.Unsupported Exception。这在链接查询中是不是可能,或者我只是忽略了一些简单的

提前致谢

2 个答案:

答案 0 :(得分:0)

这取决于您的LINQ提供商。 LINQ to Objects 支持几乎任何东西。您正在使用的那个( LINQ to Entities LINQ to SQL 或类似的东西)不支持所有内容,因为它需要理解您的表达式并将其转换为SQL (它不能用任何表达方式做到这一点)。

解决此问题的最简单方法是在某个时刻调用AsEnumerable(),以便将序列(直到该点)转换为内存中序列,这样您就可以回到 LINQ to Objects ,您可以在其上执行(以前不支持的)逻辑。

答案 1 :(得分:0)

您需要使用AsEnumerableToList从数据库中获取数据,然后您可以使用所需的任何方法。否则无法实现,因为EF Query Provider无法知道如何将您的方法转换为SQL