我在写Lambda表达式时遇到了问题,我的情况是这样的。我有一个名为FromStruct的表
CREATE TABLE [dbo].[formStruct](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[fieldName] [nvarchar](150) NOT NULL,
[fieldValue] [nvarchar](200) NOT NULL,
GO
表的示例如下:
id | Name | Value
1 | John | 87
2 | James| 35
3 | Chris| 22
我有一个字符串数组,比如
string[] names ={"John","James","Joe"}
我想要实现的是为以下任务构建三个不同的Lambda表达式:1-一个lambda表达式返回数组中字段名不是的所有记录。结果应该是"Chris | 52"
,因为Chris不在names数组中。
2-一个lambda表达式,返回names数组中字段名所在的所有记录。结果应该是"John | 87" and "James | 35"
。
3-一个lambda表达式,用于删除 names数组中字段名所在的所有记录。它应该导致"John | 87" and "James | 35"
被从表中删除。
我已经创建了一个您需要的示例。请随意将其发布在测试应用程序中,然后为您的应用程序进行必要的更改:
void Main(){
List<Test> test = new List<Test>();
test.Add(new Test{ID=1,Name="John",Value=87});
test.Add(new Test{ID=2,Name="James",Value=35});
test.Add(new Test{ID=3,Name="Chris",Value=52});
string[] names ={"John","James","Joe"};
var notContains = test.Where (t =>!names.Contains(t.Name) );
var contains = test.Where (t => names.Contains(t.Name));
var delete = test.RemoveAll(t=>names.Contains(t.Name));
}
public class Test{
public int ID{get;set;}
public string Name{get;set;}
public int Value {get;set;}
}
你可以尝试下面的查询,这只是逻辑,如果需要的话做一些修改。
//创建数据库实体
//结果1获取数组中没有名称的数据
var result1 =(from u in dbEntities.formStruct.AsEnumerable()
where !names.Any(s => s == u.fieldName)
select u
).ToList();
//result 2获取数组
中有名字的数据var result2 =(from u in dbEntities.formStruct.AsEnumerable()
where names.Any(s => s == u.fieldName)
select u
).ToList();
//这里你将得到List对象的结果。从这里你可以打印你需要的文本。
var result = formStruct.Where(w => names.Contains(w)).ToList();
formStruct.RemoveAll(u => names.Contains(u.fieldName));
//删除记录后可以打印所需的文本。