我有一个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一样。
答案 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,
...
}