如何在Linq查询中执行Guid.TryParse

时间:2015-12-16 07:34:34

标签: c# linq

我有一个linq查询,如:

from rd in registrantContext.RegistrantData
join c in registrantContext.Components    
...
select new
{
    RegistrantID = r.SortingId,
    FieldID = c.SortingId,
    FieldValue = (!Guid.TryParse(rd.Value, out guidValue) || string.IsNullOrEmpty(rd.Value)) ? rd.Value :
        (c is IComponentItemParent) ? (c as IComponentItemParent).Children.FirstOrDefault(i => i.UId == guidValue).LabelText : rd.Value,
...
}

但我收到了错误:

  

LINQ to Entities无法识别方法'布尔值   TryParse(System.String,System.Guid ByRef)'方法,以及此方法   无法翻译成商店表达。

我想知道怎么做Guid.TryParse linq查询,也许就像SqlFunctions一样。

3 个答案:

答案 0 :(得分:1)

LINQ正在尝试构建一个SQL语句来执行查询。没有与Guid.TryParse等效的内容来构建查询。在收集查询结果后,您需要排除类初始化程序的那一部分并测试该条件。

答案 1 :(得分:1)

将您的查询分为两部分。首先,使用LINQ-to-Entities从数据库中读取数据。然后,获取结果并使用常规LINQ到对象来选择所需内容 - 现在您可以使用任意C#表达式而不受LINQ到实体的限制。

答案 2 :(得分:0)

你无法在LINQ中使用GUID try parse它在使用类似ToList()之类的东西转换为sqlqery时无法识别该方法,因此它变为内存对象

像这样(如果不是大量的数据)

(from rd in registrantContext.RegistrantData
join c in registrantContext.Components select new rd, c).ToList().
Select(v=> new
{
    RegistrantID = r.SortingId,
    FieldID = c.SortingId,
    FieldValue = (!Guid.TryParse(rd.Value, out guidValue) || string.IsNullOrEmpty(rd.Value)) ? rd.Value :
        (c is IComponentItemParent) ? (c as IComponentItemParent).Children.FirstOrDefault(i => i.UId == guidValue).LabelText : rd.Value,
...
}