C# 将联接表中的字符串列与LINQ/entity framework中的可选字符串数组进行比较

C# 将联接表中的字符串列与LINQ/entity framework中的可选字符串数组进行比较,c#,.net,entity-framework,linq,asp.net-web-api,C#,.net,Entity Framework,Linq,Asp.net Web Api,我有一个.NET4.6WebAPI,我试图传入一个可选的参数,它是一个名为locations的字符串数组 我想确定我是否传入了这个参数,然后如果我确实有一个位置数组,我想确定连接表/模型中的一列是否等于位置数组中的任何字符串 我使用if-else在两个查询之间切换,在这两个查询中,我比较了似乎足够的位置 我的问题是,我不知道如何迭代locations数组中的所有元素,并将其与整个数组进行比较,而不是与行中的一个元素进行比较 dealer.Location.Contains(x))。我可以将其与单

我有一个.NET4.6WebAPI,我试图传入一个可选的参数,它是一个名为locations的字符串数组

我想确定我是否传入了这个参数,然后如果我确实有一个位置数组,我想确定连接表/模型中的一列是否等于位置数组中的任何字符串

我使用if-else在两个查询之间切换,在这两个查询中,我比较了似乎足够的位置

我的问题是,我不知道如何迭代locations数组中的所有元素,并将其与整个数组进行比较,而不是与行中的一个元素进行比较 dealer.Location.Contains(x))。我可以将其与单个元素X进行比较,但我无法正确地实施这一策略,将其与字符串数组进行一次比较,而不是将其与[this post(投票数最多的未被接受答案是我试图选择的失败答案)]中列出的单个字符串进行比较。[此链接]]我将我的where行更改为locations。是否有(derals.LocationName.Contains))我在尝试时遇到的错误是

{“内部.NET Framework数据提供程序错误1025.”

更新:我想我可能需要在我的where子句中的位置后抛出一个AsQueryable,但是这似乎并没有解决它

 public IHttpActionResult getAllCars([FromUri] string[] locations=null)
    {
        string y = "foo";
        string x = locations[0] ?? y;
        using (dbContext db = new dbContext())
        {
            if (locations == null)
            {
               var query = (from results in db.Cars
                             join dealers in db.Dealers on results.DealerID equals dealer.DealerNumber
                             select new
                             {
                                 ID = results.VinNumber,
                                 make = results.Make,
                                 model = results.Model,
                                 Dealer = dealers.DealerName
                             });
                return Ok(query.ToList());
            }
            else
            {
                var query = (from results in db.Cars
                             join dealers in db.Dealers on results.DealerID equals dealer.DealerNumber
                            where (dealer.LocationName.Contains(x))
                             select new
                             {
                                 ID = results.VinNumber,
                                 make = results.Make,
                                 model = results.Model,
                                 Dealer = dealers.DealerName
                             });
                return Ok(query.ToList());
            }

        }
    }
如果我有一个位置数组,我想确定连接表/模型中的一列是否等于位置数组中任何字符串的

您可以使用
位置
方法进行此操作

此外,您还可以通过将
交易商
放入变量来简化查询,可以选择应用过滤器,然后在查询中使用它,如下所示:

using (dbContext db = new dbContext())
{
    var dealers = db.Dealers.AsQueryable();
    if (locations != null)
        dealers = dealers.Where(dealer => locations.Contains(dealer.LocationName));

    var query = (from car in db.Cars
                 join dealer in dealers on car.DealerID equals dealer.DealerNumber
                 select new
                 {
                     ID = car.VinNumber,
                     make = car.Make,
                     model = car.Model,
                     Dealer = dealer.DealerName
                  });

    return Ok(query.ToList());
}
另外,如果您确实需要与原始代码中的部分匹配,则可以使用以下方法:

    if (locations != null)
        dealers = dealers.Where(dealer => locations.Any(location => dealer.LocationName.Contains(location)));
如果我有一个位置数组,我想确定连接表/模型中的一列是否等于位置数组中任何字符串的

您可以使用
位置
方法进行此操作

此外,您还可以通过将
交易商
放入变量来简化查询,可以选择应用过滤器,然后在查询中使用它,如下所示:

using (dbContext db = new dbContext())
{
    var dealers = db.Dealers.AsQueryable();
    if (locations != null)
        dealers = dealers.Where(dealer => locations.Contains(dealer.LocationName));

    var query = (from car in db.Cars
                 join dealer in dealers on car.DealerID equals dealer.DealerNumber
                 select new
                 {
                     ID = car.VinNumber,
                     make = car.Make,
                     model = car.Model,
                     Dealer = dealer.DealerName
                  });

    return Ok(query.ToList());
}
另外,如果您确实需要与原始代码中的部分匹配,则可以使用以下方法:

    if (locations != null)
        dealers = dealers.Where(dealer => locations.Any(location => dealer.LocationName.Contains(location)));

您是否正在尝试获取位于这些位置的车辆列表?或者是一个布尔值,表示是否存在任何结果?我正在尝试获取这些位置的汽车列表,而不是一个布尔值。对不起,不清楚请参见Ivan的答案。我正在抓取一些类似的东西。你是想得到这些地点的汽车清单吗?或者是一个布尔值,表示是否存在任何结果?我正在尝试获取这些位置的汽车列表,而不是一个布尔值。对不起,不清楚请参见Ivan的答案。我也在琢磨类似的东西。