c# – 过滤使用Linq to SQL查询objectContext
我试图搜索一些关于我的方法的例子,但所有问题都不足以达到我想要实现的目标.
为了TLDR的缘故,问题是:我如何使它在普通的sql查询中工作? 使用c# – Winforms with SqlCompact4和Linq to SQL 我的方案涉及一个表单,其中包含所有相关的Db表列作为可用的查询过滤器 然后在每个filtertextbox的文本更改事件作??为过滤器时,gridview的数据源相应地更新 所以我们说我们只专注于4列 custID,name,email,cellPhone 每个都有相应的TextBox. 首先,我系统地将所有文本框收集到列表中 var AllFormsSearchFiltersTBXLst = new List<TextBox>(); 收集当前表单上所有tbx的代码 var AllFormsSearchFiltersTBXLst = [currentFormHere].Controls.OfType<TextBox>(); 所以现在我将所有文本框都作为过滤器,无论它们是否具有任何值 如果文本长度大于零,则此过滤器文本框中的forech文本框 这意味着当前过滤器处于活动状态 然后..第二个列表AllFormsACTIVESearchfiltersTBXLst将只包含有效过滤器 我试图实现的是以同样的方式我不必指定每个文本框对象 现在我想只使用那些活动过滤器对dbContext进行过滤 所以我不必问当前的tbxName是否是电子邮件 query = db.Where(db=>db.email.Contains(TbxEmail.Text)); 并且每次10到15列都是一次又一次 到目前为止我所得到的并没有实现我前进的目标. using (SqlCeConnection ClientsConn = new SqlCeConnection(ConfigurationManager.ConnectionStrings["Conn_DB_RCL_CRM2014"].ConnectionString)) { System.Data.Linq.Table<ContactsClients> db = null; // get all column names from context var x =(System.Reflection.MemberInfo[]) typeof(ContactsClients).GetProperties(); using (DB_RCL_CRM2014Context Context = new DB_RCL_CRM2014Context(ClientsConn)) { if (!Filtered) db = Context.ContactsClients;//.Where(client => client.Name.Contains("fler")); else { db = Context.ContactsClients; // filters Dictionary contains the name of textBox and its value // I've named TBX as Columns names specially so i could equalize it to the columns names when needed to automate foreach (KeyValuePair<string,string> CurFltrKVP in FiltersDict) { foreach (var memberInfo in x) { // couldn't find out how to build the query } } } BindingSource BS_Clients = new BindingSource(); BS_Clients.DataSource = db; GV_ClientInfo_Search.DataSource = BS_Clients; 我使用普通的SQL时通常做的是 foreach文本框获取其值并将其作为过滤器添加到字符串中 var q =“where”; foreach(tbx CurTBX in ALLFILTERTBX) { q +=CurTBX.Name +" LIKE '%" + CurTBX.Text + "%'"; // and some checking of last element in list off cores } 然后将此字符串作为过滤器传递给主选择查询…这很简单 解决方法
我认为您正在尝试动态获取db的属性,例如:db.email根据文本框的循环名称(此处为’email’).但是,我建议你以其他方式做.我会为每种类型的属性进行切换,例如:电子邮件,名称等.这样的事情:
// Create a list for the results var results = new List<YourDBResultTypeHere>(); foreach(tbx CurTBX in ALLFILTERTBX) { switch(CurTBX.Name) { case "email": results.AddRange(db.Where(db => db.email.Contains(tbx.Text)).ToList()); break; case "name": results.AddRange(db.Where(db => db.name.Contains(tbx.Text)).ToList()); break; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 多个应用语句在一个rspec it子句 – 坏主
- ruby-on-rails – 续集与ActiveRecord的任何陷阱?
- ruby-on-rails – 如何在Rails 3模型中访问image_path路由助
- cocostudio scrollview裁切bug
- ruby-on-rails – Rails中JavaScript资产中的编码错误
- c# – 允许简体中文输入
- ruby-on-rails – 使用Rspec测试presence和belongs_to
- 根据TR069数据模型xml文件生成用于XACS中可用于导入的脚本
- 关于3.5 3.6版本sh: cocos: command not found解决方法
- c – 使用new来分配连续空间vs使用向量?