在我的数据库中,我在表格中保存用户标签 表结构是 表名:用户
Id Name Tags
1 Jack White,Yellow,Green
2 smith Yellow,Green
3 smith Blank
...
条件是:
string[] tags = {"Yellow","Green"};
我希望能从数据库中获取数据,所以这是我的lambda:
unitOfWork.Repository<User>().find(x=>!x.Any(x.Tag.......);
sql如:
Select * from Users Where Tags not in('Yellow','Green')
但数据库中的标签是带有&#34;,&#34;
的长字符串答案 0 :(得分:-1)
如果你有大数据,这不是一个好的解决方案但你可以选择所有数据。
var result = db.Users.ToList()
.Where(i => i.Tags.Split(',').Any(t => tags.Contains(t))).ToList();
我认为,normalize your schema
看起来更好。
其他选项:
您可以使用SqlQuery
class Users
{
public int Id { get; set; }
public string Name { get; set; }
public string Tags { get; set; }
}
string[] tags = {"Yellow","Green"};
var whereClause = String.Join(" OR ", tags.Select(i => String.Format("Tags LIKE %{0}%", i));
var query = String.Format(@"
SELECT
*
FROM
Users
Where
{0}
", whereClause);
var result = dbContext.Database.SqlQuery<Users>(query);
查询看起来像:
SELECT
*
FROM
Users
Where
Tags LIKE %Yellow% OR Tags LIKE %Green%