Linq与实体框架

时间:2013-09-04 14:50:34

标签: c# linq entity-framework

我是LINQ和实体框架的新手,并希望对以下情况提出一些建议。

我有一个包含两个表的实体模型。

Travel_Request和资源

示例字段

Travel_Request

Request_ID
Resource_ID

资源

Resource_ID
Resource_Name

我想在返回所有TRAVEL_REQUESTS

时将Resource_Name添加到列表中

提前致谢

5 个答案:

答案 0 :(得分: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
           };

答案 1 :(得分: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();

只要我正确理解了这个问题,这就行了。

答案 2 :(得分:1)

您可以查询旅行请求实体并使用导航属性来执行此操作。

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

答案 3 :(得分:1)

使用加入:

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

或者更好的做法是向TravelRequest添加Navigation属性。 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获取资源

答案 4 :(得分: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

}; 

但这只是我如何做到的一个例子,可能有更好的方法。语法可能有点偏,但总的想法就在那里。