- Web 服务不能返回匿名类型。
- 如果您正在通过数据上下文使用类构建 LINQ 查询......您无法在查询中构造这些类的实例。
我为什么要这样做?假设我想加入三个“表”或对象集。我有三个相互具有外键的项目。并且说最低,最详细的这些是由一个类表示的,该类具有来自其他两个字段的字段来表示这些数据。在我的 LINQ 查询中,我想返回一个最低、最详细的类的列表。这是我决定“将一些表连接在一起”并通过 LINQ 将每个表中的数据通过 WebService 返回到 SQL 的一种方式。这可能是不好的做法。我当然不喜欢将附加属性添加到最低级别的类中。
考虑这样的事情......(请忽略命名约定,它们是由内部考虑驱动的)也出于某种原因我需要为连接实例化一个匿名类型......我不知道为什么会这样......如果我不这样做我得到一个错误......
from su in _dataContext.GetTable<StateUpdate>()
join sfs in _dataContext.GetTable<SystemFacetState>()
on new { su.lngSystemFacetState } equals new { lngSystemFacetState = sfs.lngSystemFacetState }
join sf in _dataContext.GetTable<SystemFacet>()
on new { sfs.lngSystemFacet } equals new { lngSystemFacet = sf.lngSystemFacet }
join s in _dataContext.GetTable<System>()
on new { sf.lngSystem } equals new {lngSystem = s.lngSystem}
select new
{
lngStateUpdate = su.lngStateUpdate,
strSystemFacet = sf.strSystemFacet,
strSystemFacetState = sfs.strSystemFacetState,
dtmStateUpdate = su.dtmStateUpdate,
dtmEndTime = su.dtmEndTime,
lngDuration = su.lngDuration,
strSystem = s.strSystem
}
).ToList();
请注意,我必须构建由每种类型的片段组成的匿名类型。然后我必须做这样的事情......(将其转换为已知类型以通过 Web 服务传输)
result = new List<StateUpdate>(from a in qr select(new StateUpdate
{
lngStateUpdate = a.lngStateUpdate,
strSystemFacet = a.strSystemFacet,
strSystemFacetState = a.strSystemFacetState,
dtmStateUpdate = a.dtmStateUpdate,
dtmEndTime = a.dtmEndTime,
lngDuration = a.lngDuration,
strSystem = a.strSystem
}));
这太可怕了。也许我已经造成了一个可怕的混乱。如果我在这里偏离轨道,请引导我走向光明。当我将所有这些“未映射”属性添加到 StateUpdate 类时,我觉得我在这里遗漏了一些基本的东西。
我希望有人能看到我在这里做什么,这样我就能找到更好的方法。