2011-03-29 87 views
0

我想这样做:我可以在选择Linq to Entities查询中有条件吗?

Dim person = From p In context.persons 
    Order By p.fileNum 
    Select p.ID, 
    p.firstName, 
    p.lastName, 
    startPenpal = IIf(p.prPenPals.Count > 0, 
     p.prPenPals.FirstOrDefault.startProfile, "") 

我得到这个错误:

LINQ到实体无法识别方法 'System.Object的IIF(布尔,System.Object的,System.Object的)' 的方法,并且此方法不能转换为商店表达式。

我试图

Select p.ID, p.firstName, p.lastName, 
    startPenpal = If(i.prPenPals.Count > 0, 
     i.prPenPals.FirstOrDefault.startProfile, "") 

,我得到这个错误:

无法转换类型 'System.DateTime的' 输入 'System.Object的'。 LINQ to Entities仅支持投射实体数据模型基元类型。

有没有办法做到这一点? prPenpals可以为人员中的每个记录包含零个或一个记录。人与prPenPal之间可能存在一对一的关系,但该模型将其视为一对多关系,我无法对其进行修改。

回答

0

你的错误是在这里,我想:

If(i.prPenPals.Count > 0, i.prPenPals.FirstOrDefault.startProfile, "") 

你应该确保你将返回相同类型的值。 如果i.prPenPals.FirstOrDefault.startProfile是一个DateTime,那么这样做:

If(i.prPenPals.Count > 0, i.prPenPals.FirstOrDefault.startProfile, DateAndTime.MinValue) 

不知道关于VB的语法,因为我在C#中,但主要的思想是一致的。