C# 如果字符串linq中存在id,则将值设置为true
我在表格中有以下字段: AllowedUsers:类型为varchar(50),用户ID用逗号分隔 我必须根据我的应用程序的连接用户id是否存在于允许用户的“列表”中来设置布尔值。 你知道怎么做吗 我的问题如下:C# 如果字符串linq中存在id,则将值设置为true,c#,linq,C#,Linq,我在表格中有以下字段: AllowedUsers:类型为varchar(50),用户ID用逗号分隔 我必须根据我的应用程序的连接用户id是否存在于允许用户的“列表”中来设置布尔值。 你知道怎么做吗 我的问题如下: (from user in db.FindAll(usr => usr.Email.Equals(userLogin.Username) && usr.Password.Equals(userLogin.Password)) join office in db.
(from user in db.FindAll(usr => usr.Email.Equals(userLogin.Username) &&
usr.Password.Equals(userLogin.Password))
join office in db.FindAll() on user.OfficeId equals office.Id
select new UserDetails()
{
UserID = user.Id,
Language = user.Language,
OfficeId = user.OfficeId,
IsAllowed = user.Id.ToString().Contains(office.AllowedUsers)
}
);
然而,这是行不通的。
有任何帮助吗?集合包含用户id,而不是包含集合的用户id。但是由于
String.Split
在Linq To Sql或Linq To Entities中不可用,您需要将Linq To Object
与AsEnumerable一起使用。请注意,您应该在之前进行筛选,因为AsEnumerable
之后的所有内容都将流式传输到内存中
var loginUser =
from user in db.FindAll(usr => usr.Email.Equals(userLogin.Username) && usr.Password.Equals(userLogin.Password))
join office in db.FindAll() on user.OfficeId equals office.Id
select new { user, office };
var userDetails = from u in loginUser.AsEnumerable()
select new UserDetails()
{
UserID = u.user.Id,
Language = u.user.Language,
OfficeId = u.user.OfficeId,
IsAllowed = u.office.AllowedUsers.Split(',').Contains(u.user.Id.ToString())
};
但你真的应该解决这个烂摊子,因为太晚了。
这些用户属于通过外键链接的另一个表。您的包含方式错误:
var result = (from user in db.FindAll(usr => usr.Email.Equals(userLogin.Username) &&
usr.Password.Equals(userLogin.Password))
join office in db.FindAll() on user.OfficeId equals office.Id
select new
{
UserID = user.Id,
Language = user.Language,
OfficeId = user.OfficeId,
IsAllowed = false,
AllowedUsers = office.AllowedUsers
}
).ToList();
var final = result.Select(c=> new UserDetails {
UserID = c.Id,
Language = c.Language,
OfficeId = c.OfficeId,
IsAllowed = c.AllowedUsers.Split(",").Contains(user.Id.ToString())
});
“键入varchar(50)并用逗号分隔用户ID”为什么会这样?这些用户属于通过外键链接的另一个表。请尝试交换表达式:office.AllowedUsers.Contains(user.Id.ToString())
AllowedUsers
是一个varchar
,需要使用Split(如果不使用Linq.-to对象,则无法使用该表达式)。考虑它是<代码> 9,10< /代码>,并检查它是否包含代码> 1 。它将返回true,因为10
包含1
@Tjaart:这是有效的。谢谢但是有一个小问题:由于用户id用逗号分隔,如果我连接了id为1的用户,并且在允许用户列表中,我有19、20、23。这会将布尔值设置为true,尽管AllowedUsers中不存在1。我怎样才能解决这个问题?@Rango:你明白我的意思了。你有解决这个问题的方法吗?我在@tabby更改了我的答案,尝试上面的方法。我尝试了你的解决方案,但我得到了一个错误:查询体必须以select子句或group子句结尾。