C# 将联接表中的字符串列与LINQ/entity framework中的可选字符串数组进行比较
我有一个.NET4.6WebAPI,我试图传入一个可选的参数,它是一个名为locations的字符串数组 我想确定我是否传入了这个参数,然后如果我确实有一个位置数组,我想确定连接表/模型中的一列是否等于位置数组中的任何字符串 我使用if-else在两个查询之间切换,在这两个查询中,我比较了似乎足够的位置 我的问题是,我不知道如何迭代locations数组中的所有元素,并将其与整个数组进行比较,而不是与行中的一个元素进行比较 dealer.Location.Contains(x))。我可以将其与单个元素X进行比较,但我无法正确地实施这一策略,将其与字符串数组进行一次比较,而不是将其与[this post(投票数最多的未被接受答案是我试图选择的失败答案)]中列出的单个字符串进行比较。[此链接]]我将我的where行更改为locations。是否有(derals.LocationName.Contains))我在尝试时遇到的错误是 {“内部.NET Framework数据提供程序错误1025.” 更新:我想我可能需要在我的where子句中的位置后抛出一个AsQueryable,但是这似乎并没有解决它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))。我可以将其与单
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的答案。我也在琢磨类似的东西。