我有一个名为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
这个想法肯定不起作用
L_Type_Name = db.ACTIVITIES.Select(l =&gt; l.NAME)。Where(L_Type == l.ID)
我想要一个Linq查询而不是这个想法
答案 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