У меня проблемы с получением некоторых данных, поскольку я только начинаю использовать LINQToEntities, Entity Framework и Lambda Expressions.
Позвольте мне объяснить мой случай:
У меня есть база данных с 4 таблицами, как показано здесь:
![Database diagram](https://i.stack.imgur.com/6E8mL.jpg)
когда я генерирую модель из базы данных в Visual Studio (2010), результат будет следующим:
![Model in Visual Studio](https://i.stack.imgur.com/S8abN.jpg)
Я искал некоторую информацию и оказалось, что, поскольку таблица t_user_role имеет идентификаторы только из своих двух родительских таблиц, она абстрагируется в модели, и вместо этого вы должны использовать свойства навигации.
У меня возникли проблемы с получением информации о роли пользователя в данной системе (как и в следующей функции)
public t_role GetRoleForUser(string userId, string sysId)
{
entities = new secfinEntities(); //context from the model
t_role userRole = entities.t_role.Where(r => r.t_user.Any(u => u.uid == userId) & r.sys_id == sysId).First();
return userRole;
}
Теперь мне нужно реализовать простую функцию поиска, которая будет искать пользователей, которые содержат предоставленную строку, и возвращать идентификатор и имя пользователя (uid, user_name) и информацию об их роли (role_id, role_name) в данной системе (системная информация). у меня есть заранее), поэтому в основном я хочу превратить этот следующий SQL-запрос в лямбда-выражения (имея в виду, что в модели абстрагирована таблица t_user_role)
SELECT U.uid, U.user_name, R.role_id, R.role_name
FROM t_user U
INNER JOIN t_user_role UR ON U.uid = UR.uid
INNER JOIN t_role R ON UR.role_id = R.role_id
WHERE R.sys_id = @p0 -- first parameter
AND U.user_name LIKE '%' + @p1 + '%' -- second parameter
Кроме того, я хотел бы сохранить результаты этого в списке типа, который я определил следующим образом:
public class UserRole
{
public string UserId { get; set; }
public string UserName { get; set; }
public string RoleId { get; set; }
public string RoleName { get; set; }
public UserRole(string uid, string uname, string rid, string rname)
{
UserId = uid;
UserName = uname;
RoleId = rid;
RoleName = rname;
}
}
Итак, после объяснения того, что я сделал и что я пытаюсь сделать, первый вопрос: как это можно сделать? Во-вторых: можно ли добиться того же через многословную форму вместо лямбда-выражений? если да, то как?
Заранее большое спасибо за ваше время.