2

我有一个字符串 List 和一个供应商List<supplier>

字符串列表包含一些搜索项目,供应商列表包含供应商对象列表。现在我需要找到与字符串中的任何项目匹配的所有供应商名称List<string>

这是我失败的尝试之一..

var query = some join with the supplier table.
query = query.where(k=>stringlist.contains(k.companyname)).select (...).tolist();

知道怎么做吗?

编辑:

可能是我的问题不够清楚......我需要找到供应商列表(不仅是名称,整个对象),其中供应商名称与字符串列表中的任何项目匹配。

如果我做

query = query.where(k=>k.companyname.contains("any_string")).select (...).tolist();

有用。但这不是我的要求。我的要求是字符串列表而不是单个字符串。

4

4 回答 4

6

以下查询将返回名称列表中存在的不同供应商名称:

suppliers.Where(s => stringlist.Contains(s.CompanyName))
         .Select(s => s.CompanyName) // remove if you need whole supplier object
         .Distinct();

生成的 SQL 查询将如下所示:

SELECT DISTINCT [t0].[FCompanyName]
FROM [dbo].[Supplier] AS [t0]
WHERE [t0].[CompanyName] IN (@p0, @p1, @p2)

顺便说一句,考虑使用更好的名称,例如,companyNames而不是stringlist

于 2013-08-23T13:27:29.107 回答
4

您可以为此使用Intersect (仅用于匹配名称):

var suppliersInBothLists = supplierNames
               .Intersect(supplierObjects.Select(s => s.CompanyName));

在您的EDIT之后,对于供应商(不仅仅是名称):

var suppliers = supplierObjects.Where(s => supplierNames.Contains(s.CompanyName));
于 2013-08-23T13:30:33.437 回答
0
var matches = yourList.Where(x => stringList.Contains(x.CompanyName)).Select(x => x.CompanyName).ToList();
于 2013-08-23T13:27:24.330 回答
0

要么按照 Tim 的建议使用 join,要么直接使用 a HashSet。这比在其他一些答案中使用.Containson a更有效。List

var stringSet = new HashSet(stringList);
var result = query.Where(q => stringSet.Contains(q.Name));
于 2013-08-23T13:38:22.237 回答