如何在 linq 查询中使用方法?
How can I use a method withing a linq query?
这是我的查询
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 异常。这在 link 查询中是不可能的,还是我只是忽略了一些简单的事情
提前致谢
这取决于您的 LINQ 提供商。 LINQ to Objects 几乎支持任何东西。您正在使用的那个(LINQ to Entities 或 LINQ to SQL 或类似的东西)并不支持所有东西,因为它需要理解你的表达并将其翻译成 SQL(它不能用任何类型的表达来做到这一点)。
解决此问题的最简单方法是在某个时间点调用 AsEnumerable()
,以便将序列(直到该时间点)转换为内存中的序列,因此您将退回到 LINQ to Objects 并且您可以在其上执行(以前不受支持的)逻辑。
您需要使用AsEnumerable
或ToList
从数据库中获取数据,然后您可以使用任何您想要的方法。否则这是不可能的,因为 EF Query Provider
不知道如何将你的方法翻译成 SQL
.
这是我的查询
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 异常。这在 link 查询中是不可能的,还是我只是忽略了一些简单的事情
提前致谢
这取决于您的 LINQ 提供商。 LINQ to Objects 几乎支持任何东西。您正在使用的那个(LINQ to Entities 或 LINQ to SQL 或类似的东西)并不支持所有东西,因为它需要理解你的表达并将其翻译成 SQL(它不能用任何类型的表达来做到这一点)。
解决此问题的最简单方法是在某个时间点调用 AsEnumerable()
,以便将序列(直到该时间点)转换为内存中的序列,因此您将退回到 LINQ to Objects 并且您可以在其上执行(以前不受支持的)逻辑。
您需要使用AsEnumerable
或ToList
从数据库中获取数据,然后您可以使用任何您想要的方法。否则这是不可能的,因为 EF Query Provider
不知道如何将你的方法翻译成 SQL
.