переходящий список на запрос linq - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть запрос linq, который возвращает список, и результат выглядит следующим образом:

protected void Page_Load(object sender, EventArgs e)
{
  var MyList = GetPatientsFromDB(TheUserID);
}

Этот список имеет тип MyModel, например:

MyModel
{
public int PatientID {get;set;}
}

Теперь, что яя хочу передать этот список функции GetPatientInfo и вернуть другой список MyOtherModel

MyOtherModel{
public int PatientID {get;set;}
public string Name {get;set;}
public string Region {get;set;}
}

У меня возникли проблемы при написании второй функции.

Я начал с

public static List<MyOtherModel> GetPatientInfo(List<MyModel>
{

using (..... MyDC = new... DataContext)

{
     var OutputList = from f in MyDC.Table
                       where......?

}

Я застрял при написании предложения where и оператора вызова.Спасибо за предложения.

Ответы [ 3 ]

4 голосов
/ 01 апреля 2011
public static List<MyOtherModel> GetPatientInfo(List<MyModel list>
{
    using (..... MyDC = new... DataContext)
    {
        var result = from f in MyDC.Table
                     where list.Select(m => m.PatientID).Contains(f.PatientID)
                     select f;

        return result.ToList();
    }
}
2 голосов
/ 02 апреля 2011

Чтобы сохранить его полностью в синтаксисе запроса, это будет примерно так:

var OutputList = from f in MyDC.Table
    from m in list
    where f.PatientId == m.PatientId
    select f;

Однако, работает ли это на самом деле или нет, зависит от того, какого поставщика LINQ вы используете. Это LINQ To SQL? Объекты? Сущности? В зависимости от того, какой поставщик это, у него может не быть реализации за кулисами, которая может поддержать этот запрос. Если это так, вы можете быть вынуждены либо добавить AsEnumerable() в MyDC.Table (MyDC.Table.AsEnumerable()), либо пересмотреть свой запрос в целом. AsEnumerable перенесет всю таблицу в память, а затем с этого момента использует LINQ to Objects, что может быть дорогостоящим шагом.

1 голос
/ 01 апреля 2011
public static List<MyOtherModel> GetPatientInfo(List<MyModel> patients)
{

    using (..... MyDC = new... DataContext)
    {
        var OutputList = from f in MyDC.Table
                         where patients.Any(p => p.PatientID == f.PatientID)
                         select f;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...