2016-01-21 3 views
0

мой метод выглядеть следующим образом:возврата конкретного datafrom ФОС

public List<CivarTransporteService.Model.Cliente> getClientes() 
    { 
     using (CivarTransporteService.Model.CivarTransporteModelContainer context = new Model.CivarTransporteModelContainer()) 
     { 
      return context.Cliente.ToList(); 

     } 
    } 

и мой CS:

public interface ICatalogsService 
{ 
    [OperationContract] 
    List<CivarTransporteService.Model.Cliente> getClientes(); 
} 

фактически getClientes вернуть все поля базы данных Clientes, но я просто нужно имя клиента как я мог это сделать? thx

ответ

1

Вы можете использовать Linq Select метод расширения, чтобы получить только столбец Name. вам нужно обновить свою сигнатуру метода, чтобы теперь вернуть список строк.

Предполагая Name является собственностью клиента субъекта

public List<string> getClientes() 
{ 
    using (var context = new Model.CivarTransporteModelContainer()) 
    { 
     return context.Cliente.Select(x=>x.Name).ToList();  
    } 
} 

и интерфейс подписи, а также

public interface ICatalogsService 
{ 
    [OperationContract] 
    List<string> getClientes(); 
} 

Или, если вы не хотите, чтобы обновить существующий интерфейс и его реализации, вы можете сделать это, когда вы это называете.

ICatalogsService catalogService; 
catalogService = new SomeConcreteCatalogService(); // not the best to "new" it up. 
               // But that is not the real question here. 
var clientNameList = catalogService.getClients().Select(s=>s.Name).ToList(); 
+0

Thx вы так много, что я искал, я просто получаю сообщение об ошибке при конвертации в список – jm167

+0

что это за ошибка? – Shyju

+0

Невозможно преобразовать импликацию типа 'System.Collections.Generic.List в' System.Collections.Generic.List jm167

0

Просто, чтобы немного расширить ответ @ Shyju, если вы заинтересованы не только в одном поле. Я сделал аналогичную вещь, возвращая объекты базы данных через службу данных WCF. Я не хочу, чтобы вся модель базы данных возвращаются, только подмножество данных, поэтому я создал публичную версию класса:

[DataContract] 
public class PublicCliente 
{ 
    [DataMember(Order = 1)] 
    public int Id; 

    [DataMember(Order = 2)] 
    public string Name; 

    public PublicCliente(Cliente c) 
    { 
     Id = c.Id; 
     Name = c.Name; 
    } 
} 

Затем в методе службы данных, я сделал это:

return context.Cliente.Select(
     c => new PublicCliente(c)).ToList();