我正在尝试在linq语句上进行外卡匹配,但它没有被怀疑。
_supplierItems.Where(w =>
w.description.ToLower().Contains(txtProductCode.Text))
.Select(s=>s.code).FirstOrDefault();
cboSupplier.DataSource = _supplierItems;
cboSupplier.DisplayMember = "description";
cboSupplier.ValueMember = "code";
cboSupplier.Enabled = true;
例如,如果名字为Christian Seltmann,并且该人员键入小写字母S或其应该找到的任何内容并填充组合项目,我的问题是包含正确的方法。
我也试过以下
_supplierItems.Where(w =>
w.description.ToLower().Contains(txtProductCode.Text)).Select(s =>
s.code).ToList()
但它不能将字符串转换为列表,有人可以指出我发生了什么。
答案 0 :(得分:0)
使用
_supplierItems.Where(w => w.description.ToLower().Contains(txtProductCode.Text.ToLower()))
.Select(s => s.code)
.ToList()
或者您可以创建自己的扩展方法,如
public static bool ContainsIgnoreCase(this string source, string cont)
{
return source.IndexOf(cont, StringComparison.InvariantCultureIgnoreCase) >= 0;
}
并使用它
_supplierItems.Where(w => w.description.ContainsIgnoreCase(txtProductCode.Text))
.Select(s => s.code)
.ToList()
答案 1 :(得分:0)
该代码看起来是正确的,除了您没有对Linq调用的返回值做任何事情。尝试
var result = _supplierItems.Where(w => w.description.ToLower().Contains(txtProductCode.Text)).Select(s=>s.code).FirstOrDefault();
cboSupplier.DataSource = result;
您需要在txtProductCode控件的更改处理程序中使用此代码。
答案 2 :(得分:0)
正如其他答案中所提到的,第一个缺陷是你忽略了LINQ查询的结果。 LINQ不会改变数据源,如果您使用ToXxx()
(ToList()
,ToArray()
,ToDictionary()
等内容,它会生成新的数据流,或者对结果进行迭代Select()
或Where()
。
第二个问题是你只是匹配第一个匹配的记录。
cboSupplier.DataSource = _supplierItems.Where(w =>
w.description.ToLower().Contains(txtProductCode.Text))
.Select(s=>s.code);
这将搜索所有匹配的项目。