using(SampleEntities entities = new SampleEntities()) {
var userMap = from ad in entities.SampleGroupsSet
from uid in distinctUserIDs
where ad.ShortUserID.ToLower() == uid.ToLower()
select new {shortID = uid, longID = ad.UserID};
string userID = "sampleId";
var longIDs = from map in userMap
where map.shortID.ToLower() == userID.ToLower()
select map.longID;
if (longIDs != null && longIDs.Count() > 0)
{
...
}
...
我遇到了一个问题,如果我要查询longIDs的计数,我会遇到异常:
“无法创建类型'闭包类型'的常量值。在此上下文中仅支持基本类型(例如Int32,String和Guid')。”
有没有人遇到过这个?感谢。
答案 0 :(得分:1)
你有两个问题。这样:
uid.ToLower()
...无法转换为SQL。这样:
where map.shortID.ToLower() == userID.ToLower()
执行不区分大小写的限制是错误的方法。它使用索引失败,并导致您引用的问题。相反,做:
where map.shortID.Equals(userID, StringComparison.OrdinalIgnoreCase) // or whatever...
第二个问题:你似乎试图做一个“在哪里”。但这是错误的方式。在EF 4中,您可以:
where distinctUserIDs.Contains(ad.ShortUserID)
在EF 1中,它是more involved。