C# 带有列表的实体框架查询

C# 带有列表的实体框架查询,c#,list,entity-framework,C#,List,Entity Framework,我得到的是数据库中带有varchars的地址列,如下所示: Elmstreet / 12345 / USA 它包含街道、邮政编码和国家。不幸的是,这是一个现有的数据库,我不允许在那里做任何更改。 所以现在我需要一个基于邮政编码列表的结果集 最简单的方法是: string postalCode = "12345"; addresses = addresses.Where(x => x.Address.Contains(postalCode)); 但由于我有一份邮政编码清单,我这样做了:

我得到的是数据库中带有varchars的地址列,如下所示:

Elmstreet / 12345 / USA
它包含街道、邮政编码和国家。不幸的是,这是一个现有的数据库,我不允许在那里做任何更改。 所以现在我需要一个基于邮政编码列表的结果集

最简单的方法是:

string postalCode = "12345";
addresses = addresses.Where(x => x.Address.Contains(postalCode));
但由于我有一份邮政编码清单,我这样做了:

addresses = addresses.Where(x => postalCodes.Contains(x.Address));
但我没有得到任何结果。在考虑代码的作用后,这是显而易见的

我正在考虑使用一个额外的列表,在该列表中,我将使用foreach循环在邮政编码列表中添加单个结果

但是有没有更简单更好的方法呢


非常感谢

假设这是您的地址列表结构:

var addresses = new List<string>
{
  "Elmstreet / 12345 / USA",
  "Hollywood / 67890 / USA",
  "Time Square / 77777 / USA"
}

输出将是:

foreach (var item in result) 
{
  Console.WriteLine(item);
}
这将产生:

Elmstreet / 12345 / USA
Time Square / 77777 / USA

假设这是您的地址列表结构:

var addresses = new List<string>
{
  "Elmstreet / 12345 / USA",
  "Hollywood / 67890 / USA",
  "Time Square / 77777 / USA"
}

输出将是:

foreach (var item in result) 
{
  Console.WriteLine(item);
}
这将产生:

Elmstreet / 12345 / USA
Time Square / 77777 / USA
你在这里问的是(正如你所发现的)邮政编码列表是否包含这个完整的地址。但那不是你想要的

您要检查的是,在一个地址中是否可以找到任何邮政编码,并且只获取正确的地址。以下方法有效:

addresses = addresses.Where(x => 
                          postalCodes.Any(postalCode =>
                              x.Address.Contains(postalCode)
                          )
                      );
用词来说:给我地址字符串包含这些邮政编码的所有地址


旁白:

请记住,存在误报,例如,如果您的邮政编码为1234,而您的地址的邮政编码为12345,则会发生冲突。避免这种情况的一种方法是在邮政编码中包含地址字段中的
/
分隔符:

postalCodes = postalCodes.Select(pc => $"/ {pc} /");

// and then the rest of the code as before
这将防止大多数(如果不是全部)误报

你在这里问的是(正如你所发现的)邮政编码列表是否包含这个完整的地址。但那不是你想要的

您要检查的是,在一个地址中是否可以找到任何邮政编码,并且只获取正确的地址。以下方法有效:

addresses = addresses.Where(x => 
                          postalCodes.Any(postalCode =>
                              x.Address.Contains(postalCode)
                          )
                      );
用词来说:给我地址字符串包含这些邮政编码的所有地址


旁白:

请记住,存在误报,例如,如果您的邮政编码为1234,而您的地址的邮政编码为12345,则会发生冲突。避免这种情况的一种方法是在邮政编码中包含地址字段中的
/
分隔符:

postalCodes = postalCodes.Select(pc => $"/ {pc} /");

// and then the rest of the code as before

这将防止大多数(如果不是全部)误报。

这是一列值吗
Elmstreet/12345/USA
您能否为您的
地址
邮政编码
列表提供样本数据?这样,人们就可以很容易地可视化您拥有的数据(和某些结构)。是的,这是列中的单个值。这是一个列值吗
Elmstreet/12345/USA
您能否为您的
地址
邮政编码
列表提供样本数据?通过这种方式,人们可以很容易地可视化您拥有的数据(和某些结构)。是的,这是列中的单个值。嗨,Flater,是的,这是我想要的。Any()就是解决方案。非常感谢。嗨,弗拉特,是的,这就是我想要的。Any()就是解决方案。非常感谢。这也回答了我的问题。谢谢。这也回答了我的问题。谢谢