-1

尝试左连接 2 个表

 public IEnumerable<APPLICANT> GetApplicant()
        {
            IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>;


        if (applicantdata == null)
        {

            var applicantList = (from a in context.Profiles
                                 join app in context.APPLICANTs
                                     on a.PROFILE_ID equals app.Profile_id into joined
                                 from j in joined.DefaultIfEmpty()
                                 select new
                                            {
                                                Profiles = a,
                                                APPLICANTs= j,


                                    }).Take(1000);


            applicantdata = applicantList.AsQueryable().OrderBy(v => v.APPLICANT_ID).ToList(); 
            if (applicantdata.Any())
            {
                Cache.Set("applicants", applicantdata, 30);
            }
        }
        return applicantdata;

    }

但问题是我在最后一行有错误

applicantdata = applicantList.AsQueryable().OrderBy(v => v.APPLICANT_ID).ToList();

错误说

错误 1 ​​无法将类型“ System.Collections.Generic.List<AnonymousType#1>”隐式转换为“ System.Collections.Generic.IEnumerable<Models.APPLICANT>”。存在显式转换(您是否缺少演员表)

这是我的申请者课程

[DataContract(IsReference = true)]
public partial class APPLICANT
{
    [DataMember]
    public int APPLICANT_ID { get; set; }
    [DataMember]
    public string APPLICANT_LastName { get; set; }
    [DataMember]
    public string APPLICANT_FirstName { get; set; }
    [DataMember]
    public string APPLICANT_MiddleName { get; set; }
    [DataMember]
    public string APPLICANT_Address { get; set; }
    [DataMember]
    public string APPLICANT_City { get; set; }
    [DataMember]
    public string APPLICANT_Phone { get; set; }
    [DataMember]
    public string APPLICANT_Email { get; set; }
    [DataMember]
    public Nullable<int> Profile_id { get; set; }
4

2 回答 2

4

问题在于集合的类型。

 IEnumerable<APPLICANT> applicantdata ...

不等于您从此表达式获得的类型:

 var applicantList =
    (from a in context.Profiles
     join app in context.APPLICANTs
        on a.PROFILE_ID equals app.Profile_id into joined
      from j in joined.DefaultIfEmpty()
     select new  //<-- this is what dicides the type of the applicationList
             {
                 Profiles = a,
                 APPLICANTs= j,
       }).Take(1000);

这意味着您不能这样做:

 applicantdata = applicantList...

我认为你需要做这样的事情:

applicantdata = applicantList
                   .SelectMany(c => c.APPLICANTs) //this line added
                   .AsQueryable().OrderBy(v => v.APPLICANT_ID).ToList();

更新

如果您将我的“解决方案SelectManyapplicationList

也许这更好..:

var applicantList =
    (from a in context.Profiles
     join app in context.APPLICANTs
        on a.PROFILE_ID equals app.Profile_id into joined
      from j in joined.DefaultIfEmpty()
     select j //<--  this is APPLICANTs type
       }).Take(1000);
于 2013-05-17T06:31:10.187 回答
1

我认为您的问题不是从列表转换为 IEnumerable。相反,问题在于您不能将匿名对象的 LIST 转换为 APPLICANT 的 IEnumerable。

您应该修改您的选择语句,以便选择一个 APPLICANT。

于 2013-05-17T06:26:40.003 回答