We can add hidden fields for SITE ID and WEB ID to list.
Then in events reciever set those values for each new created item.
private void UpdateHiddenFields(SPListItem item)
{
if (item.ContentType.Name == "MyContentType")
{
try
{
this.EventFiringEnabled = false;
if (item != null)
{
var isSiteChanged = UpdateGuidField(item, Constants.Lists.News.Fields.HiddenNewsSiteGUID, item.Web.Site.ID);
var isWebChanged = UpdateGuidField(item, Constants.Lists.News.Fields.HiddenNewsWebGUID, item.Web.ID);
if (isWebChanged || isSiteChanged)
{
item.SystemUpdate();
}
}
}
catch (Exception ex)
{
LoggingService.WriteError(ex, "Cannot update hidden fields.");
}
finally
{
this.EventFiringEnabled = true;
}
}
}
private static bool UpdateGuidField(SPListItem item, string fieldName, Guid guidToSet)
{
if (item.Fields.ContainsField(fieldName))
{
var value = item[fieldName] as string;
if (string.IsNullOrEmpty(value))
{
item[fieldName] = guidToSet.ToString();
return true;
}
else
{
var guid = value.ToGuid();
if (!guid.HasValue || guid.Value != guidToSet)
{
item[fieldName] = guidToSet.ToString();
return true;
}
}
}
return false;
}
Then we can use those fields in query.