У меня проблема при попытке получить счетчик из следующего запроса:
var usersView = PopulateUsersView(); //usersView is an IQueryable object
var foo = usersView.Where(fields => fields.ConferenceRole.ToLower().Contains("role"));
Где UsersView - это класс, который заполняется из сущности 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, а не напрямую запрашивать сущность entity.users)
EDIT
Ниже приведен код из метода 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();
}
}
Спасибо
UPDATE ...
Спасибо, ребята, я наконец нашел хороший ответ на различие между объектами IQueryable и ObjectQuery.
В качестве решения я проверяю, является ли ConferenceRole нулевым, а затем проверяю с помощью метода contains, как сказали многие из вас.