سؤال

I have a property database and I am trying to get all properties added by an user. The main table is called 'Property' and there are other tables which are 'PropertyPhotos', 'City' etc. A sample database is as follows:

'Property' table

PropertyId| Area| State| UserId | ...
1         | 1   | 1    | AAA    | ...
2         | 2   | 3    | BBB    | ... 
3         | 1   | 1    | AAA    | ...

'PropertyPhotos'

PropertyPhotoId| PropertyId| FileName  | MainPic 
1              | 1         | x1.jpg    | 1
2              | 1         | X2.jpg    | 0
3              | 2         | x3.jpg    | 1
4              | 3         | x4.jpg    | 1
5              | 3         | x5.jpg    | 0
6              | 3         | x6.jpg    | 0

'AreaLookUp'

AreaLookUpId | AreaDescription
    1        | London
    2        | Birmingham
    3        | Manchester

I am trying to write a LINQ query to get information on property added by a particular user. But I am stuck when trying to retrieve the 'FileName' of the MainPic and also get count. See code below with comments.

So, for the data above, this query should return the following for "UserId = AAA"

PropertyId | ... | MainPicSrc | PhotoCount
    1      | ... | x1.jpg     | 2
    3      | ... | xr4jpg     | 3

Please help!

public IEnumerable<PropertyExcerptViewModel> GetAddedPropertyVmByUserId(string userId) 
{
    var addedProperties = from p in db.Property where p.UserId == userId
                          join pp in db.PropertyPhotos on p.PropertyId equals pp.PropertyId
                          join a in db.AreaLookUp on p.Area equals a.AreaLookUpId
                          select new PropertyExcerptViewModel
                          {
                              PropertyId = p.PropertyId,
                              PropertyType = p.PropertyType,
                              TransactionType = p.TransactionType,
                              IsPropertyDisabled = p.IsPropertyDisabled,
                              IsPropertyVerified = p.IsPropertyVerified,
                              IsPropertyNotified = p.IsPropertyNotified,
                              MainPicSrc = pp.FileName, // How to put where condition to only get FileName of just the Main Pic 
                              PhotoCount = pp.Count(), // How to get count of all pics with a particular proprtyId
                              Price = p.Price,
                              NoOfBedrooms = p.NoOfBedrooms,
                              Area = a.AreaLookUpDescription,
                              ShortDescription = (p.Description.Length > 300) ? p.Description.Substring(0,300) : p.Description
                          };

    return addedProperties.ToList();
}
هل كانت مفيدة؟

المحلول

I think where statement might be easier if you care about clear match

    var data=(from c in db.Property from v in db.PropertyPhotos from 
    n in db.AreaLookUpId 
    where c.PropertyId==v.PropertyId && c.Area==n.AreaLookUpId && c.UserId=="AAA"
 // the rest is your select

PhotoCount = v.Where(j=>j. PropertyId==c.PropertyId).Count()

نصائح أخرى

This also works - I ended up doing it this way

var addedProperties = from p in db.Property
                                  join ppic in db.PropertyPhotos on p.PropertyId equals ppic.PropertyId into pp
                                  join a in db.AreaLookUp on p.Area equals a.AreaLookUpId
                                  join cal in db.CalendarEvent on p.PropertyId equals cal.PropertyId into c
                                  where p.UserId == userId
                                  select new PropertyExcerptViewModel
                                  {
                                      PropertyId = p.PropertyId,
                                      PropertyType = p.PropertyType,
                                      PropertyCategoryDescription = pc.PropertyCategoryDescription,
                                      TransactionType = p.TransactionType,
                                      IsPropertyDisabled = p.IsPropertyDisabled,
                                      IsPropertyVerified = p.IsPropertyVerified,
                                      IsPropertyNotified = p.IsPropertyNotified,
                                      MainPicSrc = pp.Where(e => e.MainPic == true).FirstOrDefault().PhotoLocation,
                                      PhotosCount = pp.Count(),
                                      Price = p.Price,
                                      NoOfBedrooms = p.NoOfBedrooms,
                                      Area = a.AreaLookUpDescription,
                                      ShortDescription = (p.Description.Length > 300) ? p.Description.Substring(0, 300) : p.Description,
                                      LatestCalendarEvent = c.OrderByDescending(e => e.DateSaved).FirstOrDefault()
                                  };

            return addedProperties.ToList();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top