2013-09-04 3 views
3

Я новичок в LINQ и Entity Framework и хотел бы получить некоторые советы по следующему сценарию.Linq с фреймворком сущности

У меня есть модель сущности с двумя таблицами.

Travel_Request и ресурсосбережение

Примеры полей

Travel_Request

Request_ID 
Resource_ID 

ресурсов

Resource_ID 
Resource_Name 

Я хотел бы добавить resource_name в список при возвращении все TR AVEL_REQUESTS

Заранее спасибо

+0

Покажите нам запрос, который вы используете, чтобы получить все Travel_Requests, а затем, если можете, покажите нам запрос, который вы пытались получить Resource.Resource_Name. Чаще всего это упражнение заставит вас найти ответ. Кроме того, было бы неплохо узнать, есть ли у вас настройка ассоциации в вашей базе данных между этими таблицами. –

+0

Вы обычно не делали этого - у вас обычно было бы свойство навигации из Travel_Request, указывающее прямо на запрос ... –

ответ

7

Привет вам нужно использовать Linq присоединиться:

var data = from t in Travel_Request 
     join r in Resource on t.Resource_ID equals r.Resource_ID 
     select new 
       { 
       RequestId = t.Request_ID, 
       ResourceId = t.Resource_ID, 
       ResourceName = r.Resource_Name 
       }; 

Если у вас уже есть EF ассоциации, то это может быть просто:

var data = from t in Travel_Request 
    select new 
      { 
       RequestId = t.Request_ID, 
       ResourceId = t.Resource_ID, 
       ResourceName = t.Resource.Resource_Name 
      }; 
+0

Что делать, если он уже установил связь в вашей базе данных между Resource_Ids в двух таблицах? –

+0

Тогда это может быть упрощено: var data = from t in Travel_Request select new {RequestId = t.Request_ID, ResourceId = t.Resource_ID, ResourceName = t.Resource.Resource_Name} – Fabien

+0

Спасибо, отлично работает. Не могу поверить, что это так просто. – razeth01

2

Вы будете должен создать новый объект, что-то вроде этого.

var data = Travel_Request.Select(s=> new { Resource_Name = s.Recource.Resource_Name, Request_ID = s.Request_ID, Resource_ID = s.Resource_ID}).ToList(); 

До тех пор, пока я правильно понял вопрос, это сработает.

1

Вы можете запросить объект Travel_Request и использовать навигационную поддержку для этого.

var resultList = DbContext.Travel_Request.Resources.where(x=>x.Resource_Name =="Your string").ToList(); 
1

Используйте Регистрация:

Travel_Request.Join(Resource, tr => tr.ResourceId, r => r.ResourceId, (tr, r) => new { RequestId = tr.RequestId, ResourceId = tr.ResourceId, Name = r.ResourceName}) 

Или, что лучше практика будет добавляет свойство навигации к TravelRequest. TravelRequest будет выглядеть следующим образом:

int RequestId { get; set; } 
int ResourceId{ get; set; } 
[ForeignKey("ResourceId")] 
Resource Resource { get; set; } 

Таким образом, вы можете использовать Include

DBContext.TravelRequests.Include("Resource").First().Resource.Name; 

Include говорит EF, чтобы получить ресурс с TravelerRequest

1

Я хотел бы добавить модель, которая имеет все три затем сделайте что-нибудь вроде.

var TravelRequests = 
    from p in Travel_Request 
from r in Resource.where(Res => Res.Resource_ID == p.Resource_ID) 
    select new TravelModel{ 
requestID = p.requestID, 
Resource_ID = p.Resource_ID, 
ResourceName = r.ResourceName 

}; 

Но это просто пример того, как я это сделаю, и там могут быть лучшие способы. Также синтаксис может немного отличаться, но есть общая идея.

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