我对 ASP.NET 和 LINQ 还比较陌生,但我遇到了一个非常奇怪的行为,几乎让我发疯。我发现了一些关于标题中提到的错误的讨论,但似乎没有一个适合我的问题。请查看来自对象关系设计器的以下快照:
如您所见,aRelation
代表两个Anchor
s 的连接。因此,为此为表定义了两个外键Relation
:Relation.AnchorIDFrom => Anchor.AnchorID
和Relation.AnchorIDTo => Anchor.AnchorID
。这些列都不能为空。我现在的目标是,给定一个锚点的 ID 列表,检索所有Relation
这些锚点参与的所有 s。这是实现此目的的方法:
[WebMethod]
public string GetRelations(String token, List<Guid> anchorIDs)
{
JavaScriptSerializer js = new JavaScriptSerializer();
LinkItCoreDataContext dc = new LinkItCoreDataContext();
IQueryable relationQry =
from anchor in dc.Anchors
where anchorIDs.Contains(anchor.AnchorID)
//stupid names because object relational designer
//does not seem to support custom names:
from relation in anchor.Relations.Union(anchor.Relations1)
select new
{
relationID = relation.RelationID,
anchorIDFrom = relation.AnchorIDFrom,
anchorIDTo = relation.AnchorIDTo,
relationTypes = from type in relation.RelationTypes
//stupid names again:
select type.RelationType1
};
return js.Serialize(relationQry);//Here's where the error occurs
}
在运行时,这给了我一个NotSupportedException
说明Union 或 Concat 中的类型是不兼容构造的。我认为这很奇怪,因为表达式anchor.Relations.Union(anchor.Relations1)
应该合并两个在句法意义上完全相等的东西。如果我将临界线更改为from relation in anchor.Relations
或from relation in anchor.Relations1
一切正常。此外,添加ToList()
(有时被称为解决方案)不会改变任何东西。
我错过了什么?