如何使用linq查询
忽略字符串数组的完全匹配这是我的代码有什么不对吗
public string GetItems(string SearchText, Int64 userID, Int64 orgID, Int64 locationID, string[] selectedProductName)
{
List<Product> searchList = new List<Product>();
string jsonText = "";
try
{
searchList = dbContext.usp_ang_GetProductList_(orgID, SearchText, locationID, 0).ToList();
var abc = searchList.Where(a => a.Name.Any(a.Name != selectedProductName).ToList();
jsonText = JsonConvert.SerializeObject(abc);
}
catch (Exception ex)
{
}
return jsonText;
}
答案 0 :(得分:2)
您对.Any
的使用不正确:
any
的{{1}}是否char
construct a.name
匹配一些谓词。.Any(a.Name != selectedProductName)
- 您需要形成格式正确的lambda表达式您想要检查any
数组的selectedProductName
值是否等于a.Name
。
var abc = searchList.Where(a => !selectedProductName.Any(name => name == a.Name)).ToList();
由于selectedProductName
是string[]
,因此使用.Contains
更简洁:
var abc = searchList.Where(a => !selectedProductName.Contains(a.Name)).ToList();
同样令人遗憾的是,从数据库中提取所有数据只是为了过滤它之后的行。如果删除ToList()
,则会在数据库中进行过滤:
var abc = dbContext.usp_ang_GetProductList_(orgID, SearchText, locationID, 0)
.Where(a => !selectedProductName.Contains(a.Name)).ToList();
答案 1 :(得分:1)
您需要检查selectedProductName
列表中是否没有名称,为此您可以使用Contains
子句
var abc = searchList.Where(a => !selectedProductName.Contains(a => a.Name )).ToList();
为了更好的表现,你可以在一个陈述中做所有的事情
var abc = dbContext.usp_ang_GetProductList_(orgID, SearchText, locationID, 0)
.Where(a => !selectedProductName.Contains(a.Name)).ToList();