我有一个使用 Entity Framework 和 LINQ 的 Windows 窗体应用程序,并且有许多表单我使用 BindingNavigator 来导航数据,我想在导航器中添加一个文本框来搜索特定项目并导航到它,我做了一个从,但现在我必须对其他表单执行相同的步骤,并在每个表单中添加相同的事件和代码,所以我决定制作一个自定义 ToolStripTextBox 并在每个表单中使用它,但我必须使其通用因为每种形式都使用不同的对象或实体,这就是我想出的:
class ToolStripSearchBox<T> : ToolStripTextBox
{
BindingSource dataSource;
int currentIndex;
public ToolStripSearchBox()
: base()
{
KeyUp += new KeyEventHandler(ToolStripSearchBox_KeyUp);
}
void ToolStripSearchBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F4)
{
string patern = Text;
List<T> TList = dataSource.List.Cast<T>().ToList();
int res = 0;
T foundT = default(T);
if (int.TryParse(patern, out res))
{
foundT = TList.Where(j => j. == res).First();
}
else
{
foundT = TList.First(j => (j.FirstName + " " + j.LastName).Contains(patern));
}
if (foundT == null)
{
return;
}
dataSource.Position = dataSource.IndexOf(foundT);
}
}
}
但问题是每个实体都有不同的属性要过滤,我正在考虑使用字符串参数来传递对象属性名称,但我没有找到将它与 LINQ 一起使用的方法。
对不起,如果有听写错误,但英语不是我的第一语言提前谢谢