lambda查询数据,如sql不在

时间:2016-08-04 10:39:29

标签: sql-server

在我的数据库中,我在表格中保存用户标签 表结构是 表名:用户

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;

的长字符串

1 个答案:

答案 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%