我在尝试从以下查询中获取计数时遇到问题:
var usersView = PopulateUsersView(); //usersView is an IQueryable object
var foo = usersView.Where(fields => fields.ConferenceRole.ToLower().Contains("role"));
其中 UsersView 是一个从名为 users 的 EF 实体填充的类(请参阅上面代码中的第一行)
这是 UsersView 类的类定义:
public class UsersView
{
public int UserId { get; set; }
public string Title { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Street1 { get; set; }
public string Street2 { get; set; }
public string City { get; set; }
public string PostCode { get; set; }
public string CountryName { get; set; }
public string WorkPlaceName { get; set; }
public string Gender { get; set; }
public string EMail { get; set; }
public string Company { get; set; }
public string RoleName { get; set; }
public string ConferenceRole { get; set; }
}
正如我所说,尝试执行 foo.Count() 行返回 Null 异常,这可能是因为 ConferenceRole 列允许数据库中的 Null。
现在我无法理解的是,当我直接在 ObjectQuery 上调用相同的查询时,会返回记录计数(即调用 foo2.Count()),没有任何异常。
var foo2 = entities.users.Where(fields => fields.ConferenceRole.ToLower().Contains("role"));
是否可以使用上述相同的查询但使用 IQueryable usersView 对象?
(对我来说使用 usersView 对象而不是直接查询entities.users 实体至关重要)
编辑
下面是来自 PopulateUsersView 方法的代码
private IQueryable<UsersView> PopulateUsersView()
{
using (EBCPRegEntities entities = new EBCPRegEntities())
{
var users = entities.users.ToList();
List<UsersView> userViews = new List<UsersView>();
foreach (user u in users)
{
userViews.Add(new UsersView()
{
UserId = u.UserId,
Title = u.Title,
Name = u.Name,
Surname = u.Surname,
Street1 = u.Street1,
Street2 = u.Street2,
City = u.City,
PostCode = u.Post_Code,
CountryName = u.country.Name,
WorkPlaceName = u.workplace.Name,
Gender = u.Gender,
EMail = u.E_Mail,
Company = u.Company,
RoleName = u.roles.FirstOrDefault().Name,
ConferenceRole = u.ConferenceRole
});
}
return userViews.AsQueryable();
}
}
谢谢
更新...
谢谢大家,我终于找到了一个很好的答案来解决 IQueryable 和 ObjectQuery 对象之间的区别。
作为一种解决方案,我正在检查 ConferenceRole 是否为空,然后像你们中的许多人所说的那样使用 contains 方法进行检查。