2015-06-02 2 views
0

У меня проблема с написанием выражения Lambda, Вот моя ситуация. У меня есть tablenamed FromStruct.Как достичь этого с помощью Lambda

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

То, что я пытаюсь добиться, чтобы построить три различные лямбда-выражения для следующих задач: 1- Лямбда-выражение для возврата всех записей, имя их поля НЕ ЕСТЬ в массиве. Это должно привести к "Chris | 52", потому что Криса нет в массиве имен.

2- Лямбда-выражение для возврата всех записей, имена их полей которых указаны в массиве имен. Это должно привести к "John | 87" and "James | 35".

3- Лямбда-выражение для удаления всех записей, имя их поля IS в массив имен. Это должно привести к удалению из таблицы "John | 87" and "James | 35". Заранее спасибо.

+0

Это больше похоже на таблицу для меня :) Можете ли вы поделиться своей попыткой кода на C# тоже, пожалуйста? И тег с языком, например. C#? – StuartLC

+0

@StuartLC, Да, это на самом деле стол, мой плохой, Извините. Я не написал код для этого сейчас, главным образом потому, что я не мог сделать необходимые лямбда-выражения. Если бы я мог сделать выражения, то остальное - кусок пирога. –

+0

Взгляните на ['Содержит'] (https://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains%28v=vs.100%29.aspx) – DavidG

ответ

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

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

// после удаления записей вы можете распечатать требуемый текст.

Пожалуйста, поделитесь своими отзывами о том же.

Смежные вопросы