LINQ查询从另一个表中获取数据

时间:2017-08-24 19:45:48

标签: c# linq

我有两张桌子

Table 1

Table 2

我正在尝试编写一个LINQ查询,我想在表1中选择所有内容,而不是CaseStatusID,我想返回实际状态(对应于表2中的CaseStatusID)。

我有查询但我错误Cannot convert expression type 'System.Collections.Generic.List<CaseId:int, Status:string>' to return type 'System.Collections.Generic.List<Data.Cases>'

我找不到一个很好的例子来帮助我。我怎样才能做到这一点?

    public List<Case> GetAllCases()
    {
        var result = (from c in _Context.Cases
                     join s in _Context.CaseStatus on c.CaseStatusId 
                     equals s.CaseStatusId
                     select new { c.CaseId, c.CaseStatu.Status }).ToList();

        return result;
    }

3 个答案:

答案 0 :(得分:3)

您的返回类型与声明的返回类型List<Case>不匹配。当您select new {}时,实际上是从linq表达式返回一个匿名对象。你可以像这样解决它:

public List<Case> GetAllCases()
{
    var result = (from c in _Context.Cases
                 join s in _Context.CaseStatus on c.CaseStatusId 
                 equals s.CaseStatusId
                 select new Case { CaseId = c.CaseId, CaseStatus = c.CaseStatu.Status }).ToList();

    return result;
}

选择数据时请注意new Case{}。您可能需要更改CaseIdCaseStatus属性以匹配Case类中的实际属性。

更新:要澄清,您需要一个看起来最低限度的Case课程:

public class Case {
    public int CaseId { get; set; }
    public string CaseStatus { get; set; }
}

答案 1 :(得分:0)

我认为问题出在select语句中,你应该返回Case的对象列表:

public List<Case> GetAllCases()
    {
        var result = (from c in _Context.Cases
                     join s in _Context.CaseStatus on c.CaseStatusId 
                     equals s.CaseStatusId
                     select new Case () { CaseId = c.CaseId, CaseStatusId = c.CaseStatusId  }).ToList();

        return result;
}

答案 2 :(得分:0)

您正在创建匿名类型列表并返回案例列表。这就是问题