如何在C#中将项目列表与数据库匹配

时间:2016-03-12 09:58:03

标签: c# linq

我有一个字符串列表

List<string> list = new List<string>();
list.Add("john");
list.Add("David");
list.Add("Sam");

现在我想检查数据库中的列是否包含这些列表项。

var v = db.employee.where(s => s.Content.Contains(list));

我的问题是如何在不使用任何循环的情况下,只在一个查询中将所有列表项匹配到数据库列。如果单个列表项与列匹配,则查询必须返回结果。我上面提到的查询不起作用。请帮我解决这个问题。

7 个答案:

答案 0 :(得分:1)

这只会假设您的Restangular是实体框架dbDbContexts.Content。如果您正在使用其他ORM,那么它可能无效。

string

答案 1 :(得分:0)

你可以这样做:

.ToList()

您可以尝试省略var query = db.employee.AsQueryable(); query = list.Aggregate(query, (query, name) => query.Where(empl => empl.Content.Contains(name))); 行,但我担心您的ORM不会知道如何将查询转换为SQL。

如果希望在SQL中执行整个查询,则应考虑以这种方式构建查询:

{{1}}

答案 2 :(得分:0)

怎么样:

 List<string> list = new List<string> {"john", "Warwick", "Sam"};

 var vresult = _db.employee.Where(x => list.Contains(x.Content)).ToList();

请说明你的期望......?比如它怎么不起作用?

答案 3 :(得分:0)

如果return不同于null,则存在。

public List<Employee> CheckIfExists(List<string> nameList)
{
    if (nameList == null)
    {
        return null;
    }

    string inClause = "";

    foreach (var item in nameList)
    {
        inClause = string.Format("{0},{1}", inClause, item);
    }

    return db.employee.SqlQuery("SELECT * FROM employee WHERE employee.Name IN (@p0)", inClause).ToList(); 
}

答案 4 :(得分:0)

列表的每个元素都将作为参数传递给 s.Content.Contains 这是一份员工记录。

var v = db.employee.Where(s => list.Any(s.Content.Contains));

答案 5 :(得分:0)

这可能会帮助您, 名称为{{“ john”,“ David”,“ Sam”}的列表 您要检查员工表中是否存在John / David / Sam。 以下查询用于检查员工中是否存在特定名称

var _data = _db.employee.Where(emp => list.Any(li => li.name == emp.name)).ToList();

答案 6 :(得分:0)

LINQ查询语法:

var result = from o in db.employee
             where list.Contains(o.Content)
             select o;