我写了一个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不在名称数组中。
2-一个lambda表达式,用于返回其名称数组中字段名称为IS的所有记录。
它应该导致"John | 87" and "James | 35"
。
3-一个lambda表达式删除其字段名称在 names数组中的所有记录。它应该导致"John | 87" and "James | 35"
从表中删除。提前谢谢。
答案 0 :(得分:0)
您可以尝试以下查询,这只是逻辑,如果需要可以进行一些修改。
//将数据库实体创建为dbEntities
//结果1获取数组中没有名称的数据
var result1 =(from u in dbEntities.formStruct.AsEnumerable()
where !names.Any(s => s == u.fieldName)
select u
).ToList();
//结果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));
//删除记录后,您可以打印所需的文本。
请分享您的反馈意见。
答案 1 :(得分:0)
我已经创建了一个你需要的例子。请随意将其发布到测试应用程序中,然后对您的应用程序进行必要的更改:
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;}
}