【发布时间】:2012-07-31 21:32:24
【问题描述】:
我一直在搜索一整天都找不到解决这个问题的方法......
我有一个 EntityCollection 的 Communication 对象,每个对象都有一个 Intention 对象的实例(一对一)。
我还有一个 User 对象,它有许多 UserLocation EntityObjects(一对多)实例
-
Intention对象有一个属性UID。 UserLocation对象具有属性LID。我想编写一个 LINQ 表达式,它返回所有
Communication对象,其中与Intention对象关联的Intention实例的Communication对象等于ANY 的任何实例的任何LID属性UserLocationUser对象的实例。
我试过了
return _context.Communications.Where
(u => u.Intention.UID.Equals
(user.UserLocations.Select
(p => p.LID)));
还有这个
return _context.Communications.Where
(u => user.UserLocations.Any
(x => x.LID.Equals
(u.Intention.UID)));
还有这个
var thislist = from Intentions in _context.Intentions
join UserLocations in user.UserLocations
on Intentions.UID equals UserLocations.LID
select Intentions.UID;
return _context.Communications.Where(u => u.Intention.Equals(thislist.Any()));
还有这个
var lidlist = user.UserLocations.Select(x => x.LID);
return _context.Communications.Where(x=> lidlist.Contains(x.Intention.UID)).ToList();
(这让我在 Contains 语句中出现错误,提示“Delegate System.Func<Communication,int,bool> 不接受 1 个参数”,不知道如何解决)
除了所有这些变化之外,我还有:
- 修改了我的方法以返回
IQueryable<Communication>,并且还尝试了List<Communication>,同时将ToList()附加到我的查询中。
没有任何作用。无论我尝试什么,我总是会遇到这个异常
NotSupportedException 未被用户代码处理
无法创建“PreparisCore.BusinessEntities.UserLocation”类型的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。
我做错了什么??
【问题讨论】:
-
UID和LID有哪些类型?
-
嗯,比第二种形式应该有效。为了清楚起见,我会使用 = 。我会尝试写一个测试用例来确认。
-
哪个代表不接受 1 个参数?通常,异常会准确指定委托类型。你的方法返回什么类型?我认为最后一个代码应该可以工作。其他三个确实不行。
-
我想我发现了第二种形式的问题...... BRB
-
@Slauma System.Func
标签: c# linq entity-framework linq-to-entities entitycollection