如何在LINQ中基于给定ID的另一个表名查看模型字段?

时间:2016-02-01 00:37:13

标签: c# linq

我有一个名为licenses的数据库表,我根据用户搜索条件对其进行过滤

 public class LicencesVM
    {
     public decimal ID { get; set; }
     ...
     public decimal Req_ID { get; set; }
     public int L_Type { get; set; }
    public string L_Type_Name { get; set; } // I created this field to carry ACTIVITIES->NAME Field where LicencesVM.L_Type = ACTIVITIES.ID
    ...
    }

使用数据填充LicencesVM的存储库搜索功能

public LicencesVM[] Search(int? take, int? skip, string FullName, int L_Type, string Hafiza_ID)
            {
                IQueryable<LICENSES> Licences = db.LICENSES;
                if (!string.IsNullOrEmpty(FullName))
                {
                    Licences = Licences.Where(x => x.FULLNAME.Contains(FullName));
                }
                if (!string.IsNullOrEmpty(L_Type))
                {
                    decimal L_Type1 = Convert.ToDecimal(L_Type);
                    Licences = Licences.Where(x => x.L_TYPE == L_Type1);
                }
                if (!string.IsNullOrEmpty(Hafiza_ID))
                {
                    Licences = Licences.Where(x => x.HAFIZA_ID.Contains(Hafiza_ID));
                }
LicencesVM[] LicencesVM_AllQuery = Licences.Select(s => new LicencesVM
            {
                ID = s.ID,
                FullName = s.FULLNAME,
                Hafiza_ID = s.HAFIZA_ID,
                L_Type = s.L_TYPE,
                ShName = s.SHNAME,
                Saq_No = s.SAQ_NO,
                L_Type_Name=db.ACTIVITIES.Select(l=>l.NAME).Where(L_Type == l.ID),
                Sh_ID = s.SH_ID,
                Hii = s.HII,
                Street = s.STREET,
                Lic_ID = s.LIC_ID,
                Lic_Date = s.LIC_DATE,
                Lic_End_Date = s.LIC_END_DATE,
                Sh_Owner = s.SH_OWNER
            }).ToArray();

            return LicencesVM_AllQuery;

        }

ACTIVITIES类需要名称

public partial class ACTIVITIES
{
    public decimal ID { get; set; }
    public string NAME { get; set; }
}

这里是(Activities) NAME = (LicencesVM ) L_Type

我想根据L_Type = db.ACTIVITIES.ID

取得NAME

这个想法肯定不起作用

L_Type_Name = db.ACTIVITIES.Select(l =&gt; l.NAME)。Where(L_Type == l.ID)

我想要一个Linq查询而不是这个想法

1 个答案:

答案 0 :(得分:0)

在执行填充LicensesVm []数组的查询之前,您可以加入活动,如下所示:

Licenses.Join(db.Activities, l=>l.L_TYPE,a=>a.Id,(l,a)=>new LicenseVM {
    ID=l.Id,
    L_TYPE_Name=a.Name,
    ...
}).ToArray()

这是内连接案例。如果需要外连接,则应使用GroupJoin