LINQ与实体框架

3

我是LINQ和Entity Framework的新手,希望能得到有关以下情况的建议。

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

Travel_Request(差旅申请)和Resource(资源)

样例字段

Travel_Request(差旅申请)

Request_ID
Resource_ID

资源

Resource_ID
Resource_Name

当返回所有旅行请求时,我希望将Resource_Name添加到列表中。

提前致谢。


请展示您正在使用的查询以获取所有Travel_Requests,然后,如果可以的话,请展示您尝试获取Resource.Resource_Name的查询。往往情况下,这个练习会让您发现答案。另外,如果您的数据库中这些表之间有关联设置,那么也很好知道。 - Brad Rem
通常情况下,您不会这样做 - 您通常会从Travel_Request拥有一个导航属性,指向请求本身... - Martin Milan
5个回答

7

你需要使用Linq join:

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

如果他已经在您的数据库中设置了两个表之间的Resource_Ids关联,那该怎么办? - Brad Rem
那么它可以简化为:var data = from t in Travel_Request select new { RequestId = t.Request_ID, ResourceId = t.Resource_ID, ResourceName = t.Resource.Resource_Name } - Fabien

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
使用 Join:
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

}; 

但那只是我如何做的一个例子,可能有更好的方法。语法可能会有点问题,但总体思路在那里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接