如何使用Lambda

时间:2015-06-02 11:32:18

标签: sql database linq entity-framework

我写了一个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"从表中删除。提前谢谢。

2 个答案:

答案 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;}

}