LINQ to Entities问题

时间:2010-03-31 15:36:58

标签: c# linq linq-to-entities

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')。”

有没有人遇到过这个?感谢。

1 个答案:

答案 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