基于此处的文档:http: //docs.composite.net/Data/AccessingDataWithCSharp/How-to-Query-Data-Using-LINQ#_How_to_Query
我需要使用 string[int1,int2,int3..] 类型的过滤器查询表中的数据,但不知道如何去做。
string[] 来自一个不同的表字段,它在表单上存储多选元素的 id 值:
表“配置文件”(AGlobal.profile)包含列:
Id Types(profile_accomtypes)
1 1,2
2 4,7
3 12,4,6
4 3,6,9
然后我有一个静态表“TypeDesc”(ALocal.proptype),总共列出了 12 个“Type”值:
Id Description(proptype_names)
1 The first description
2 The second description
........
12 The twelfth description
我创建了一个强编码类,使我能够轻松处理客户端提交的表单内容。表单中有几个多选(其中一个是上面 Profile 数据类型表中的“类型”。)每个多选都以序列化 JSON 格式传递给服务器,其中我是字符串。用逗号加入“类型”值分隔符保存到 Profile.Types 列。
现在,我想通过加载 Profile Id 的 Types string[] 并使用 int id 值过滤 TypeDesc 表以仅选择带有 Description 的 Type 值,从而将配置文件页面中的选择提供给客户端,以便我可以呈现描述作为客户端的项目符号列表。
配置文件表中的过滤器类型始终是 id 整数我使用的代码是:
var myProftype =
(from d in connection.Get<AGlobal.profile>() // find multiselected type string values
where d.Id == StUserSet.utoken
select d).First();
string sProftype = myProftype.profile_accomtypes;
string[] sTypes = sProftype.Split(',');
// now filter proptypes to sTypes
var myTAccomtypes =
(from d in connection.Get<ALocal.proptype>() // get all the types from the DB
where(r => sTypes.Contains(r.Field<int>("Id"))) //Lambda ?
select d).All;
StringBuilder sb = new StringBuilder(0); //create a bullet list string
// Loop over strings
foreach (string s in myTAccomtypes)
{
sb.append("<dd>"+ s +"</dd>");
}
TuAccomtypes = sb.ToString(); // pass string to JQuery Taconite as part of AJAX response to alter DOM.
我在 Lambda 上尝试过滤我的类型时出错。 在 VS2010 中:
错误 = 无法将 lambda 表达式转换为 bool 类型,因为它不是委托类型。
我也不知道如何将 sTypes 变量解析为 int (如果需要),以便过滤器工作:(
我哪里错了?是否有一种更简洁的方法可以根据从 db 表中的列字段查询的逗号分隔列表过滤数据集?
提前感谢您的任何帮助/想法。马丁。