Hi guys i have this query
public IQueryable<HeaderMRC> ShowHeader(int MRCId)
{
return from m in _ctx.MaterialRequestContractorDetails
where m.MaterialRequestContractorId == MRCId
join materialRequestContractor in _ctx.MaterialRequestContractors on m.MaterialRequestContractorId equals materialRequestContractor.Id
join mat in _ctx.MaterialDescriptions on m.MaterialDescriptionId equals mat.Id
join l in _ctx.Lines on m.LineId equals l.Id
join s in _ctx.Sheets on l.Id equals s.LineId
select new HeaderMRC()
{
Code = materialRequestContractor.Code,
UnitArea = l.Unit,
LineType = l.Type,
RequestDate = materialRequestContractor.RequestDate
};
}
This query produces more than one record but i just need the first one ,how can i return the first value as IQueryable
Just add .First()
or .FirstOrDefault()
return (from m in _ctx.MaterialRequestContractorDetails
where m.MaterialRequestContractorId == MRCId
join materialRequestContractor in _ctx.MaterialRequestContractors on m.MaterialRequestContractorId equals materialRequestContractor.Id
join mat in _ctx.MaterialDescriptions on m.MaterialDescriptionId equals mat.Id
join l in _ctx.Lines on m.LineId equals l.Id
join s in _ctx.Sheets on l.Id equals s.LineId
select new HeaderMRC()
{
Code = materialRequestContractor.Code,
UnitArea = l.Unit,
LineType = l.Type,
RequestDate = materialRequestContractor.RequestDate
}).FirstOrDefault();
OR
return (from m in _ctx.MaterialRequestContractorDetails
where m.MaterialRequestContractorId == MRCId
join materialRequestContractor in _ctx.MaterialRequestContractors on m.MaterialRequestContractorId equals materialRequestContractor.Id
join mat in _ctx.MaterialDescriptions on m.MaterialDescriptionId equals mat.Id
join l in _ctx.Lines on m.LineId equals l.Id
join s in _ctx.Sheets on l.Id equals s.LineId
select new HeaderMRC()
{
Code = materialRequestContractor.Code,
UnitArea = l.Unit,
LineType = l.Type,
RequestDate = materialRequestContractor.RequestDate
}).First();
FirstOrDefault
will return the first one, or if there isn't one Default(T)
which is usually null if it is a class object...
So to get it as a IQueryable
which doesn't seem to me like the thing to do:
return new List<HeaderMRC> { (from m in _ctx.MaterialRequestContractorDetails
where m.MaterialRequestContractorId == MRCId
join materialRequestContractor in _ctx.MaterialRequestContractors on m.MaterialRequestContractorId equals materialRequestContractor.Id
join mat in _ctx.MaterialDescriptions on m.MaterialDescriptionId equals mat.Id
join l in _ctx.Lines on m.LineId equals l.Id
join s in _ctx.Sheets on l.Id equals s.LineId
select new HeaderMRC()
{
Code = materialRequestContractor.Code,
UnitArea = l.Unit,
LineType = l.Type,
RequestDate = materialRequestContractor.RequestDate
}).FirstOrDefault() }.AsQueryable();
Just enclose your query with ()
and append Take(1)
, which is the set equivalent of the FirstOrDefault
:
return (from m in ...
...
...).Take(1);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.