如何遍历对象数组并匹配数据库并返回与linq的匹配

时间:2015-12-25 16:46:07

标签: c# arrays linq asp.net-web-api2

我需要将id传递给webapi控制器并返回结果。我目前正在将id作为一个对象数组传递。我需要将id与数据集匹配并返回结果。我发现了一些我想要使用的帖子。

 return db.markets.Where(x => db.markets.Contains(x.x_market_code));

这不起作用,因为它不是字符串或列表?我试图将数组转换为字符串或列表,我没有任何地方。

这是代码

 public class marketIds
{
    public int x_market_code { get; set; }
}

    [HttpPost]
    [Route("getAssignedMarkets")]
    public IQueryable GetAssignedMarkets(marketIds[] arry)
    {
      return db.markets.Where(x => arry.Contains(x.x_market_code));
    }

如果需要,我可以更改我在javascript中传递id的方式。

错误消息 image

2 个答案:

答案 0 :(得分:2)

我认为市场代码是int所以:

[HttpPost]
[Route("getAssignedMarkets")]
public IQueryable GetAssignedMarkets(int[] arry)
{
  return db.markets.Where(x => arry.Contains(x.x_market_code));
}

但你可以使用字符串或其他, 但是你仍然可以使用你的课程:

 public class marketIds
{
    public int x_market_code { get; set; }
}

    [HttpPost]
    [Route("getAssignedMarkets")]
    public IQueryable GetAssignedMarkets(marketIds[] arry)
    {
      return db.markets.Where(x => arry.where(t=>t.x_market_code == x.x_market_code).Any());
    }

根据您的错误消息,这可能会对您有所帮助:

[HttpPost]
[Route("getAssignedMarkets")]
public IQueryable GetAssignedMarkets(int[] arry)
{
  return db.markets.Where(x => arry.Contains(x.x_market_code.Value)).ToList();
}

答案 1 :(得分:1)

您可以将数组中的所有market_code转换为字符串集合,然后在LINQ查询中使用Contains()方法。

var codeList = arry.Select(s => s.x_market_code).ToList();
var result=db.markets.Where(x => codeList.Contains(x.x_market_code));
return result;

假设您将其与市场表中的market_code列进行比较,并且类型为Int