本文整理汇总了C#中Dictionary.AddOrIgnore方法的典型用法代码示例。如果您正苦于以下问题:C# Dictionary.AddOrIgnore方法的具体用法?C# Dictionary.AddOrIgnore怎么用?C# Dictionary.AddOrIgnore使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Dictionary
的用法示例。
在下文中一共展示了Dictionary.AddOrIgnore方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetConfiguredValues
/// <summary>
/// Gets the values.
/// </summary>
/// <param name="configurationValues">The configuration values.</param>
/// <returns></returns>
public static Dictionary<string, string> GetConfiguredValues( Dictionary<string, ConfigurationValue> configurationValues )
{
var items = new Dictionary<string, string>();
if ( configurationValues.ContainsKey( "values" ) )
{
string listSource = configurationValues["values"].Value;
var options = new Lava.CommonMergeFieldsOptions();
options.GetLegacyGlobalMergeFields = false;
var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields( null, null, options );
listSource = listSource.ResolveMergeFields( mergeFields );
if ( listSource.ToUpper().Contains( "SELECT" ) && listSource.ToUpper().Contains( "FROM" ) )
{
var tableValues = new List<string>();
DataTable dataTable = Rock.Data.DbService.GetDataTable( listSource, CommandType.Text, null );
if ( dataTable != null && dataTable.Columns.Contains( "Value" ) && dataTable.Columns.Contains( "Text" ) )
{
foreach ( DataRow row in dataTable.Rows )
{
items.AddOrIgnore( row["value"].ToString(), row["text"].ToString() );
}
}
}
else
{
foreach ( string keyvalue in listSource.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ) )
{
var keyValueArray = keyvalue.Split( new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries );
if ( keyValueArray.Length > 0 )
{
items.AddOrIgnore( keyValueArray[0].Trim(), keyValueArray.Length > 1 ? keyValueArray[1].Trim() : keyValueArray[0].Trim() );
}
}
}
}
return items;
}
示例2: Execute
/// <summary>
/// Executes the specified workflow.
/// </summary>
/// <param name="rockContext">The rock context.</param>
/// <param name="action">The action.</param>
/// <param name="entity">The entity.</param>
/// <param name="errorMessages">The error messages.</param>
/// <returns></returns>
public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages )
{
errorMessages = new List<string>();
if ( entity is Model.BinaryFile )
{
var binaryFile = (Model.BinaryFile) entity;
if ( binaryFile.BinaryFileType.Guid != new Guid( SystemGuid.BinaryFiletype.CHECKIN_LABEL ) )
{
errorMessages.Add( "Binary file is not a check-in label" );
action.AddLogEntry( "Binary file is not a check-in label", true );
return false;
}
binaryFile.LoadAttributes();
// Get the existing merge fields
var existingMergeFields = new Dictionary<string, string>();
foreach ( var keyAndVal in binaryFile.GetAttributeValue( "MergeCodes" ).Split( new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries ) )
{
var keyVal = keyAndVal.Split( new char[] { '^' } );
if ( keyVal.Length == 2 )
{
existingMergeFields.AddOrIgnore( keyVal[0], keyVal[1] );
}
}
// Build new merge fields
var newMergeFields = new List<string>();
foreach ( Match match in Regex.Matches( binaryFile.ContentsToString(), @"(?<=\^FD)((?!\^FS).)*(?=\^FS)" ) )
{
string value = existingMergeFields.ContainsKey( match.Value ) ? existingMergeFields[match.Value] : "";
newMergeFields.Add( string.Format( "{0}^{1}", match.Value, value ) );
}
// Save attribute value
var attributeValue = new AttributeValueCache();
attributeValue.Value = newMergeFields.AsDelimited( "|" );
binaryFile.AttributeValues["MergeCodes"] = attributeValue;
binaryFile.SaveAttributeValues( rockContext );
}
return true;
}
示例3: BindSchedules
private void BindSchedules( int? locationId )
{
var schedules = new Dictionary<int, string> { { 0, "" } };
if ( _group != null && locationId.HasValue )
{
_group.GroupLocations
.Where( l => l.LocationId == locationId.Value )
.SelectMany( l => l.Schedules )
.OrderBy( s => s.Name )
.ToList()
.ForEach( s => schedules.AddOrIgnore( s.Id, s.Name ) );
}
if ( schedules.Any() )
{
ddlSchedule.DataSource = schedules;
ddlSchedule.DataBind();
}
ddlSchedule.Visible = ddlSchedule.Items.Count > 1;
}
示例4: ShowActivityDialog
/// <summary>
/// Shows the activity dialog.
/// </summary>
/// <param name="activityGuid">The activity unique identifier.</param>
private void ShowActivityDialog( Guid activityGuid )
{
ddlActivity.Items.Clear();
ddlActivity.Items.Add( new ListItem( string.Empty, string.Empty ) );
var connectors = new Dictionary<int, Person>();
ConnectionRequestActivity activity = null;
using ( var rockContext = new RockContext() )
{
var connectionRequestService = new ConnectionRequestService( rockContext );
var connectionRequest = connectionRequestService.Get( hfConnectionRequestId.ValueAsInt() );
if ( connectionRequest != null &&
connectionRequest.ConnectionOpportunity != null &&
connectionRequest.ConnectionOpportunity.ConnectionType != null )
{
foreach ( var activityType in connectionRequest.ConnectionOpportunity.ConnectionType.ConnectionActivityTypes.OrderBy( a => a.Name ) )
{
if ( activityType.IsAuthorized( Authorization.VIEW, CurrentPerson ) )
{
ddlActivity.Items.Add( new ListItem( activityType.Name, activityType.Id.ToString() ) );
}
}
connectionRequest.ConnectionOpportunity.ConnectionOpportunityConnectorGroups
.Where( g =>
!g.CampusId.HasValue ||
!connectionRequest.CampusId.HasValue ||
g.CampusId.Value == connectionRequest.CampusId.Value )
.SelectMany( g => g.ConnectorGroup.Members )
.Select( m => m.Person )
.ToList()
.ForEach( p => connectors.AddOrIgnore( p.Id, p ) );
}
if ( activityGuid != Guid.Empty )
{
activity = new ConnectionRequestActivityService( rockContext ).Get( activityGuid );
if ( activity != null && activity.ConnectorPersonAlias != null && activity.ConnectorPersonAlias.Person != null )
{
connectors.AddOrIgnore( activity.ConnectorPersonAlias.Person.Id, activity.ConnectorPersonAlias.Person );
}
}
}
if ( CurrentPerson != null )
{
connectors.AddOrIgnore( CurrentPerson.Id, CurrentPerson );
}
ddlActivity.SetValue( activity != null ? activity.ConnectionActivityTypeId : 0 );
ddlActivityConnector.Items.Clear();
connectors
.ToList()
.OrderBy( p => p.Value.LastName )
.ThenBy( p => p.Value.NickName )
.ToList()
.ForEach( c =>
ddlActivityConnector.Items.Add( new ListItem( c.Value.FullName, c.Key.ToString() ) ) );
ddlActivityConnector.SetValue(
activity != null && activity.ConnectorPersonAlias != null ?
activity.ConnectorPersonAlias.PersonId : CurrentPersonId ?? 0 );
tbNote.Text = activity != null ? activity.Note : string.Empty;
hfAddConnectionRequestActivityGuid.Value = activityGuid.ToString();
if ( activityGuid == Guid.Empty )
{
dlgConnectionRequestActivities.Title = "Add Activity";
dlgConnectionRequestActivities.SaveButtonText = "Add";
}
else
{
dlgConnectionRequestActivities.Title = "Edit Activity";
dlgConnectionRequestActivities.SaveButtonText = "Save";
}
ShowDialog( "ConnectionRequestActivities", true );
}
示例5: RebindGroupRole
private void RebindGroupRole( ConnectionRequest connectionRequest, RockContext rockContext )
{
int? currentRoleId = ddlPlacementGroupRole.SelectedValueAsInt();
ddlPlacementGroupRole.SelectedValue = null;
ddlPlacementGroupRole.Items.Clear();
if ( !currentRoleId.HasValue && connectionRequest.AssignedGroupMemberRoleId.HasValue )
{
currentRoleId = connectionRequest.AssignedGroupMemberRoleId.Value;
}
var roles = new Dictionary<int, string>();
int? groupId = ddlPlacementGroup.SelectedValueAsInt();
if ( groupId.HasValue )
{
var group = new GroupService( rockContext ).Get( groupId.Value );
if ( group != null )
{
foreach ( var groupConfig in new ConnectionOpportunityGroupConfigService( rockContext )
.Queryable().AsNoTracking()
.Where( c =>
c.ConnectionOpportunityId == connectionRequest.ConnectionOpportunityId &&
c.GroupTypeId == group.GroupTypeId ) )
{
if ( groupConfig.GroupMemberRole != null )
{
roles.AddOrIgnore( groupConfig.GroupMemberRole.Id, groupConfig.GroupMemberRole.Name );
}
}
}
}
foreach ( var roleItem in roles )
{
var listItem = new ListItem( roleItem.Value, roleItem.Key.ToString() );
listItem.Selected = currentRoleId.HasValue && currentRoleId.Value == roleItem.Key;
ddlPlacementGroupRole.Items.Add( listItem );
}
ddlPlacementGroupRole.Visible = ddlPlacementGroupRole.Items.Count > 1;
RebindGroupStatus( connectionRequest, rockContext );
}
示例6: ProcessPayments
//.........这里部分代码省略.........
if ( remainingAmount > 0.0M )
{
transaction.Summary = "Note: Downloaded transaction amount was greater than the configured allocation amounts for the Scheduled Transaction.";
var transactionDetail = transaction.TransactionDetails
.OrderByDescending( d => d.Amount )
.First();
if ( transactionDetail == null && defaultAccount != null )
{
transactionDetail = new FinancialTransactionDetail();
transactionDetail.AccountId = defaultAccount.Id;
}
if ( transactionDetail != null )
{
transactionDetail.Amount += remainingAmount;
transactionDetail.Summary = "Note: Extra amount was applied to this account.";
}
History.EvaluateChange( txnChanges, defaultAccount.Name, 0.0M.ToString( "C2" ), transactionDetail.Amount.ToString( "C2" ) );
History.EvaluateChange( txnChanges, "Summary", string.Empty, transactionDetail.Summary );
}
// Get the batch
var batch = batchService.Get(
batchNamePrefix,
currencyTypeValue,
creditCardTypevalue,
transaction.TransactionDateTime.Value,
gateway.GetBatchTimeOffset(),
batches );
var batchChanges = new List<string>();
if ( batch.Id != 0 )
{
initialControlAmounts.AddOrIgnore( batch.Guid, batch.ControlAmount );
}
batch.ControlAmount += transaction.TotalAmount;
batch.Transactions.Add( transaction );
// Add summary
if ( !batchSummary.ContainsKey( batch.Guid ) )
{
batchSummary.Add( batch.Guid, new List<Payment>() );
}
batchSummary[batch.Guid].Add( payment );
totalAdded++;
}
else
{
totalNoScheduledTransaction++;
}
}
else
{
totalAlreadyDownloaded++;
}
}
foreach ( var batch in batches )
{
var batchChanges = new List<string>();
allBatchChanges.Add( batch.Guid, batchChanges );
if ( batch.Id == 0 )
{
示例7: AddOrIgnoreTest
public void AddOrIgnoreTest()
{
var dic=new Dictionary<string, string>();
dic.AddOrIgnore("test","test");
Assert.AreEqual("test",dic["test"]);
dic.AddOrIgnore("test","Jonas");
Assert.AreEqual("test", dic["test"]);
Assert.AreNotEqual("Jonas", dic["test"]);
}
示例8: lbPlaceInGroup_Click
/// <summary>
/// Handles the Click event of the lbPlaceInGroup control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void lbPlaceInGroup_Click( object sender, EventArgs e )
{
var col = gGroupPlacements.Columns.OfType<GroupPickerField>().FirstOrDefault();
if ( col != null )
{
var placements = new Dictionary<int, List<int>>();
var colIndex = gGroupPlacements.Columns.IndexOf( col ).ToString();
foreach ( GridViewRow row in gGroupPlacements.Rows )
{
GroupPicker gp = row.FindControl( "groupPicker_" + colIndex.ToString() ) as GroupPicker;
if ( gp != null )
{
int? groupId = gp.SelectedValueAsInt();
if ( groupId.HasValue )
{
int registrantId = (int)gGroupPlacements.DataKeys[row.RowIndex].Value;
placements.AddOrIgnore( groupId.Value, new List<int>() );
placements[groupId.Value].Add( registrantId );
}
}
}
using ( var rockContext = new RockContext() )
{
var groupMemberService = new GroupMemberService( rockContext );
// Get all the registrants that were selected
var registrantIds = placements.SelectMany( p => p.Value ).ToList();
var registrants = new RegistrationRegistrantService( rockContext )
.Queryable( "PersonAlias" ).AsNoTracking()
.Where( r => registrantIds.Contains( r.Id ) )
.ToList();
// Get any groups that were selected
var groupIds = placements.Keys.ToList();
foreach ( var group in new GroupService( rockContext )
.Queryable( "GroupType" ).AsNoTracking()
.Where( g => groupIds.Contains( g.Id ) ) )
{
foreach ( int registrantId in placements[group.Id] )
{
int? roleId = group.GroupType.DefaultGroupRoleId;
if ( !roleId.HasValue )
{
roleId = group.GroupType.Roles
.OrderBy( r => r.Order )
.Select( r => r.Id )
.FirstOrDefault();
}
var registrant = registrants.FirstOrDefault( r => r.Id == registrantId );
if ( registrant != null && roleId.HasValue && roleId.Value > 0 )
{
var groupMember = new GroupMember();
groupMember.PersonId = registrant.PersonAlias.PersonId;
groupMember.GroupId = group.Id;
groupMember.GroupRoleId = roleId.Value;
groupMember.GroupMemberStatus = GroupMemberStatus.Active;
groupMemberService.Add( groupMember );
}
}
}
rockContext.SaveChanges();
}
}
BindGroupPlacementGrid();
}
示例9: SaveRegistration
//.........这里部分代码省略.........
HistoryService.SaveChanges(
new RockContext(),
typeof( Person ),
Rock.SystemGuid.Category.HISTORY_PERSON_DEMOGRAPHIC_CHANGES.AsGuid(),
person.Id,
personChanges, true, CurrentPersonAliasId );
}
}
}
else
{
// otherwise look for one and one-only match by name/email
var personMatches = personService.GetByMatch( registration.FirstName, registration.LastName, registration.ConfirmationEmail );
if ( personMatches.Count() == 1 )
{
registrar = personMatches.First();
registration.PersonAliasId = registrar.PrimaryAliasId;
}
else
{
registrar = null;
registration.PersonAlias = null;
registration.PersonAliasId = null;
}
}
}
// Set the family guid for any other registrants that were selected to be in the same family
if ( registrar != null )
{
var family = registrar.GetFamilies( rockContext ).FirstOrDefault();
if ( family != null )
{
multipleFamilyGroupIds.AddOrIgnore( RegistrationState.FamilyGuid, family.Id );
if ( !singleFamilyId.HasValue )
{
singleFamilyId = family.Id;
}
}
}
// Make sure there's an actual person associated to registration
if ( !registration.PersonAliasId.HasValue )
{
// If a match was not found, create a new person
var person = new Person();
person.FirstName = registration.FirstName;
person.LastName = registration.LastName;
person.IsEmailActive = true;
person.Email = registration.ConfirmationEmail;
person.EmailPreference = EmailPreference.EmailAllowed;
person.RecordTypeValueId = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.PERSON_RECORD_TYPE_PERSON.AsGuid() ).Id;
if ( dvcConnectionStatus != null )
{
person.ConnectionStatusValueId = dvcConnectionStatus.Id;
}
if ( dvcRecordStatus != null )
{
person.RecordStatusValueId = dvcRecordStatus.Id;
}
registrar = SavePerson( rockContext, person, RegistrationState.FamilyGuid, CampusId, null, adultRoleId, childRoleId, multipleFamilyGroupIds, ref singleFamilyId );
registration.PersonAliasId = registrar != null ? registrar.PrimaryAliasId : (int?)null;
History.EvaluateChange( registrationChanges, "Registrar", string.Empty, registrar.FullName );
}
示例10: SavePerson
/// <summary>
/// Saves the person.
/// </summary>
/// <param name="rockContext">The rock context.</param>
/// <param name="person">The person.</param>
/// <param name="familyGuid">The family unique identifier.</param>
/// <param name="campusId">The campus identifier.</param>
/// <param name="location">The location.</param>
/// <param name="adultRoleId">The adult role identifier.</param>
/// <param name="childRoleId">The child role identifier.</param>
/// <param name="multipleFamilyGroupIds">The multiple family group ids.</param>
/// <param name="singleFamilyId">The single family identifier.</param>
/// <returns></returns>
private Person SavePerson( RockContext rockContext, Person person, Guid familyGuid, int? campusId, Location location, int adultRoleId, int childRoleId,
Dictionary<Guid, int> multipleFamilyGroupIds, ref int? singleFamilyId )
{
int? familyId = null;
if ( person.Id > 0 )
{
rockContext.SaveChanges();
// Set the family guid for any other registrants that were selected to be in the same family
var family = person.GetFamilies( rockContext ).FirstOrDefault();
if ( family != null )
{
familyId = family.Id;
multipleFamilyGroupIds.AddOrIgnore( familyGuid, family.Id );
if ( !singleFamilyId.HasValue )
{
singleFamilyId = family.Id;
}
}
}
else
{
// If we've created the family aready for this registrant, add them to it
if (
( RegistrationTemplate.RegistrantsSameFamily == RegistrantsSameFamily.Ask && multipleFamilyGroupIds.ContainsKey( familyGuid ) ) ||
( RegistrationTemplate.RegistrantsSameFamily == RegistrantsSameFamily.Yes && singleFamilyId.HasValue )
)
{
// Add person to existing family
var age = person.Age;
int familyRoleId = age.HasValue && age < 18 ? childRoleId : adultRoleId;
familyId = RegistrationTemplate.RegistrantsSameFamily == RegistrantsSameFamily.Ask ?
multipleFamilyGroupIds[familyGuid] :
singleFamilyId.Value;
PersonService.AddPersonToFamily( person, true, multipleFamilyGroupIds[familyGuid], familyRoleId, rockContext );
}
// otherwise create a new family
else
{
// Create Person/Family
var familyGroup = PersonService.SaveNewPerson( person, rockContext, campusId, false );
if ( familyGroup != null )
{
familyId = familyGroup.Id;
// Store the family id for next person
multipleFamilyGroupIds.AddOrIgnore( familyGuid, familyGroup.Id );
if ( !singleFamilyId.HasValue )
{
singleFamilyId = familyGroup.Id;
}
}
}
}
if ( familyId.HasValue && location != null )
{
var homeLocationType = DefinedValueCache.Read( Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_HOME.AsGuid() );
if ( homeLocationType != null )
{
var familyGroup = new GroupService( rockContext ).Get( familyId.Value );
if ( familyGroup != null )
{
GroupService.AddNewGroupAddress(
rockContext,
familyGroup,
Rock.SystemGuid.DefinedValue.GROUP_LOCATION_TYPE_HOME,
location.Street1, location.Street2, location.City, location.State, location.PostalCode, location.Country, true );
}
}
}
return new PersonService( rockContext ).Get( person.Id );
}
示例11: gfMetricValues_ApplyFilterClick
/// <summary>
/// Handles the ApplyFilterClick event of the gfMetricValues control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void gfMetricValues_ApplyFilterClick( object sender, EventArgs e )
{
gfMetricValues.SaveUserPreference( "Date Range", drpDates.DelimitedValues );
gfMetricValues.SaveUserPreference( "Goal/Measure", ddlGoalMeasure.SelectedValue );
var metric = new MetricService( new RockContext() ).Get( hfMetricId.Value.AsInteger() );
var entityTypeEntityFilters = new Dictionary<int, int?>();
foreach ( var metricPartition in metric.MetricPartitions )
{
var metricPartitionEntityType = EntityTypeCache.Read( metricPartition.EntityTypeId ?? 0 );
var controlId = string.Format( "metricPartition{0}_entityTypeEditControl", metricPartition.Id );
Control entityTypeEditControl = phMetricValuePartitions.FindControl( controlId );
int? entityId;
if ( metricPartitionEntityType != null && metricPartitionEntityType.SingleValueFieldType != null && metricPartitionEntityType.SingleValueFieldType.Field is IEntityFieldType )
{
entityId = ( metricPartitionEntityType.SingleValueFieldType.Field as IEntityFieldType ).GetEditValueAsEntityId( entityTypeEditControl, new Dictionary<string, ConfigurationValue>() );
entityTypeEntityFilters.AddOrIgnore( metricPartitionEntityType.Id, entityId );
}
}
var entityTypeEntityUserPreferenceValue = entityTypeEntityFilters
.Select( a => new { EntityTypeId = a.Key, EntityId = a.Value } )
.Select( a => string.Format( "{0}|{1}", a.EntityTypeId, a.EntityId ) )
.ToList().AsDelimited( "," );
gfMetricValues.SaveUserPreference( this.EntityTypeEntityPreferenceKey, entityTypeEntityUserPreferenceValue );
BindGrid();
}
示例12: CreateEntityValueLookups
/// <summary>
/// Creates the entity value lookups.
/// </summary>
/// <param name="metricID">The metric identifier.</param>
private void CreateEntityValueLookups( int? metricID )
{
Metric metric = new MetricService( new RockContext() ).Get( metricID ?? 0 );
if ( metric != null )
{
var rockContext = new RockContext();
_entityTypeEntityNameLookup = new Dictionary<int, Dictionary<int, string>>();
_entityTypeEntityLookupQry = new Dictionary<int, IQueryable<IEntity>>();
foreach ( var metricPartition in metric.MetricPartitions.Where( a => a.EntityTypeId.HasValue ) )
{
var entityTypeCache = EntityTypeCache.Read( metricPartition.EntityTypeId ?? 0 );
_entityTypeEntityNameLookup.AddOrIgnore( entityTypeCache.Id, new Dictionary<int, string>() );
_entityTypeEntityLookupQry.AddOrIgnore( entityTypeCache.Id, null );
if ( entityTypeCache != null )
{
if ( entityTypeCache.GetEntityType() == typeof( Rock.Model.Group ) )
{
_entityTypeEntityLookupQry[entityTypeCache.Id] = new GroupService( rockContext ).Queryable();
}
else
{
Type[] modelType = { entityTypeCache.GetEntityType() };
Type genericServiceType = typeof( Rock.Data.Service<> );
Type modelServiceType = genericServiceType.MakeGenericType( modelType );
var serviceInstance = Activator.CreateInstance( modelServiceType, new object[] { rockContext } ) as IService;
MethodInfo qryMethod = serviceInstance.GetType().GetMethod( "Queryable", new Type[] { } );
_entityTypeEntityLookupQry[entityTypeCache.Id] = qryMethod.Invoke( serviceInstance, new object[] { } ) as IQueryable<IEntity>;
}
}
}
}
}
示例13: GetSuggestions
/// <summary>
/// Gets the suggestions.
/// </summary>
/// <param name="followingSuggestionType">Type of the following suggestion.</param>
/// <param name="followerPersonIds">The follower person ids.</param>
/// <returns></returns>
public override List<PersonEntitySuggestion> GetSuggestions( FollowingSuggestionType followingSuggestionType, List<int> followerPersonIds )
{
var suggestions = new List<PersonEntitySuggestion>();
var personAliasEntityType = EntityTypeCache.Read( typeof( Rock.Model.PersonAlias ) );
bool isAutoFollow = GetAttributeValue( followingSuggestionType, "AutoFollow" ).AsBoolean();
// Get the grouptype guid
Guid? groupTypeGuid = GetAttributeValue( followingSuggestionType, "GroupType" ).AsGuidOrNull();
if ( groupTypeGuid.HasValue )
{
using ( var rockContext = new RockContext() )
{
var groupMemberService = new GroupMemberService( rockContext );
var personAliasService = new PersonAliasService( rockContext );
// Get all the groupmember records for any follower and the selected group type
var followers = groupMemberService.Queryable().AsNoTracking()
.Where( m =>
m.GroupMemberStatus == GroupMemberStatus.Active &&
m.Group != null &&
m.Group.IsActive &&
m.Group.GroupType.Guid.Equals( groupTypeGuid.Value ) &&
followerPersonIds.Contains( m.PersonId ) );
// If a specific group or security role was specifed, limit groupmembers to only those of the selected group
Guid? groupGuid = GetAttributeValue( followingSuggestionType, "Group" ).AsGuidOrNull();
if ( !groupGuid.HasValue )
{
groupGuid = GetAttributeValue( followingSuggestionType, "SecurityRole" ).AsGuidOrNull();
}
if ( groupGuid.HasValue )
{
followers = followers.Where( m => m.Group.Guid.Equals( groupGuid.Value ) );
}
// If a specific role for the follower was specified, limit groupmembers to only those with the selected role
Guid? followerRoleGuid = GetAttributeValue( followingSuggestionType, "FollowerGroupType" ).AsGuidOrNull();
if ( followerRoleGuid.HasValue )
{
followers = followers.Where( m => m.GroupRole.Guid.Equals( followerRoleGuid.Value ) );
}
// Run the query to get all the groups that follower is a member of with selected filters
var followerPersonGroup = followers
.Select( f => new
{
f.PersonId,
f.GroupId
} )
.ToList();
// Get a unique list of any of the groups that followers belong to
var followedGroupIds = followerPersonGroup
.Select( f => f.GroupId )
.Distinct()
.ToList();
// Start building query to get the people to follow from any group that contains a follower
var followed = groupMemberService
.Queryable().AsNoTracking()
.Where( m => followedGroupIds.Contains( m.GroupId ) );
// If a specific role for the people being followed was specified, limit the query to only those with the selected role
Guid? followedRoleGuid = GetAttributeValue( followingSuggestionType, "FollowedGroupType" ).AsGuidOrNull();
if ( followedRoleGuid.HasValue )
{
followed = followed.Where( m => m.GroupRole.Guid.Equals( followedRoleGuid.Value ) );
}
// Get all the people in any of the groups that contain a follower
var followedPersonGroup = followed
.Select( f => new
{
f.PersonId,
f.GroupId
} )
.ToList();
// Get distinct list of people
var followedPersonIds = followedPersonGroup
.Select( f => f.PersonId )
.Distinct()
.ToList();
// Build a dictionary of the personid->personaliasid
var personAliasIds = new Dictionary<int, int>();
personAliasService.Queryable().AsNoTracking()
.Where( a =>
followedPersonIds.Contains( a.PersonId ) &&
a.PersonId == a.AliasPersonId )
.ToList()
.ForEach( a => personAliasIds.AddOrIgnore( a.PersonId, a.Id ) );
//.........这里部分代码省略.........
示例14: GetMergeObjectList
//.........这里部分代码省略.........
// if we are combining from a GroupMemberEntityType list add the GroupMember attributes of the primary person in the combined list
if ( isGroupMemberEntityType )
{
var groupMember = qryEntity.OfType<GroupMember>().Where( a => a.PersonId == primaryGroupPerson.Id ).FirstOrDefault();
primaryGroupPerson.AdditionalLavaFields = primaryGroupPerson.AdditionalLavaFields ?? new Dictionary<string, object>();
if ( groupMember != null )
{
primaryGroupPerson.AdditionalLavaFields.Add( "GroupMember", groupMember );
}
}
if ( combinedFamilyItem.Persons.Count() > 1 )
{
var combinedPerson = primaryGroupPerson.ToJson().FromJsonOrNull<MergeTemplateCombinedPerson>();
var familyTitle = RockUdfHelper.ufnCrm_GetFamilyTitle( rockContext, null, combinedFamilyItem.GroupId, commaPersonIds, true );
combinedPerson.FullName = familyTitle;
var firstNameList = combinedFamilyItem.Persons.Select( a => ( a as Person ).FirstName ).ToList();
var nickNameList = combinedFamilyItem.Persons.Select( a => ( a as Person ).NickName ).ToList();
combinedPerson.FirstName = firstNameList.AsDelimited( ", ", " & " );
combinedPerson.NickName = nickNameList.AsDelimited( ", ", " & " );
combinedPerson.LastName = primaryGroupPerson.LastName;
combinedPerson.SuffixValueId = null;
combinedPerson.SuffixValue = null;
mergeObject = combinedPerson;
}
else
{
mergeObject = primaryGroupPerson;
}
mergeObjectsDictionary.AddOrIgnore( primaryGroupPerson.Id, mergeObject );
}
}
else if ( isGroupMemberEntityType )
{
foreach ( var groupMember in qryEntity.AsNoTracking().OfType<GroupMember>() )
{
var person = groupMember.Person;
person.AdditionalLavaFields = new Dictionary<string, object>();
person.AdditionalLavaFields.Add( "GroupMember", groupMember );
mergeObjectsDictionary.AddOrIgnore( groupMember.PersonId, person );
}
}
else
{
foreach ( var item in qryEntity.AsNoTracking() )
{
mergeObjectsDictionary.AddOrIgnore( item.Id, item );
}
}
}
var entitySetItemService = new EntitySetItemService( rockContext );
string[] emptyJson = new string[] { string.Empty, "{}" };
var entitySetItemMergeValuesQry = entitySetItemService.GetByEntitySetId( entitySetId, true ).Where( a => !emptyJson.Contains( a.AdditionalMergeValuesJson ) );
if ( fetchCount.HasValue )
{
entitySetItemMergeValuesQry = entitySetItemMergeValuesQry.Take( fetchCount.Value );
}
// the entityId to use for NonEntity objects
int nonEntityId = 1;
示例15: BindGrid
//.........这里部分代码省略.........
}
}
}
else
{
int? personId = ppPerson.SelectedValue;
if ( personId.HasValue )
{
qryAttendance = qryAttendance.Where( a => a.PersonAlias.PersonId == personId.Value );
}
}
// Filter by Date Range
if ( drpDates.LowerValue.HasValue )
{
qryAttendance = qryAttendance.Where( t => t.StartDateTime >= drpDates.LowerValue.Value );
}
if ( drpDates.UpperValue.HasValue )
{
DateTime upperDate = drpDates.UpperValue.Value.Date.AddDays( 1 );
qryAttendance = qryAttendance.Where( t => t.StartDateTime < upperDate );
}
// Filter by Schedule
int? scheduleId = spSchedule.SelectedValue.AsIntegerOrNull();
if ( scheduleId.HasValue && scheduleId.Value > 0 )
{
qryAttendance = qryAttendance.Where( h => h.ScheduleId == scheduleId.Value );
}
// Filter by DidAttend
int? didAttend = ddlDidAttend.SelectedValueAsInt( false );
if ( didAttend.HasValue )
{
if ( didAttend.Value == 1 )
{
qryAttendance = qryAttendance.Where( a => a.DidAttend == true );
}
else
{
qryAttendance = qryAttendance.Where( a => a.DidAttend == false );
}
}
var qry = qryAttendance
.Select( a => new
{
LocationId = a.LocationId,
LocationName = a.Location.Name,
CampusId = a.CampusId,
CampusName = a.Campus.Name,
ScheduleName = a.Schedule.Name,
Person = a.PersonAlias.Person,
GroupName = a.Group.Name,
GroupTypeId = a.Group.GroupTypeId,
StartDateTime = a.StartDateTime,
EndDateTime = a.EndDateTime,
DidAttend = a.DidAttend
} );
SortProperty sortProperty = gHistory.SortProperty;
if ( sortProperty != null )
{
qry = qry.Sort( sortProperty );
}
else
{
qry = qry.OrderByDescending( p => p.StartDateTime );
}
// build a lookup for _groupTypePaths for OnRowDatabound
_groupTypePaths = new GroupTypeService( rockContext ).GetAllCheckinGroupTypePaths().ToList();
// build a lookup for _locationpaths for OnRowDatabound
_locationPaths = new Dictionary<int, string>();
var qryLocations = new LocationService( rockContext ).Queryable().Where( a => qry.Any( b => b.LocationId == a.Id ) );
foreach (var location in qryLocations)
{
var parentLocation = location.ParentLocation;
var locationNames = new List<string>();
while (parentLocation != null)
{
locationNames.Add( parentLocation.Name );
parentLocation = parentLocation.ParentLocation;
}
string locationPath = string.Empty;
if ( locationNames.Any() )
{
locationNames.Reverse();
locationPath = locationNames.AsDelimited( " > " );
}
_locationPaths.AddOrIgnore( location.Id, locationPath );
}
gHistory.EntityTypeId = EntityTypeCache.Read<Attendance>().Id;
gHistory.DataSource = qry.ToList();
gHistory.DataBind();
}