【问题标题】:How to achieve this using Lambda如何使用 Lambda 实现这一目标
【发布时间】:2015-06-02 11:32:17
【问题描述】:

我在编写 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 表达式,用于返回其字段名称 IS NOT 在数组中的所有记录。 结果应该是 "Chris | 52",因为 Chris 不在 names 数组中。

2- 一个 lambda 表达式,用于返回其字段名称在 names 数组中的所有记录。 它应该导致 "John | 87" and "James | 35"

3- 一个 lambda 表达式,用于删除其字段名称名称数组中的所有记录。它应该导致"John | 87" and "James | 35" 从表中删除。提前致谢。

【问题讨论】:

  • 这对我来说更像是一张桌子 :) 你也可以分享你的 C# 代码尝试吗?并用语言标记,例如C#?
  • @StuartLC,是的,它实际上是一张桌子,我的错,对不起。我现在没有为此编写任何代码,主要是因为我无法制作所需的 lambda 表达式。如果我能表达出来,剩下的就是小菜一碟了。
  • 看看Contains
  • 你不会用 lambda 表达式删除记录,2 和 3 是相同的。
  • @StuartLC 我需要选择的字段在名称数组内,您的提示代码导致所有字段名称都被选中,这与我的需要不同。我需要选择字段名称在名称数组中的所有记录。

标签: sql database linq entity-framework


【解决方案1】:

我已经创建了一个您需要的示例。随意将其发布到测试应用程序中,然后对您的应用程序进行必要的更改:

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

}

【讨论】:

    【解决方案2】:

    您可以尝试以下查询,这只是逻辑,如果需要,请进行一些修改。

    //创建数据库实体为dbEntities

    //result 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)); 
    

    //删除记录后可以打印需要的文本。

    请分享您的反馈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      相关资源
      最近更新 更多