public int Id { get; set { this.Id = extractId(value); }}
public int UserId { get; set { this.UserId = extractUserId(value); }}
.....
Затем назначьте его в выборе:
var theString = "The user with id '2209' viewed the 'url' activity with course module id '317'.";
var modCompletedResult = allLog
.Where(x => x.EventName == EventNameMessage.CourseModuleView)
.Select(x => new CourseModuleView()
{
Id = theString,
UserId = theString,
......
}).ToList();
Извините, я использую телефон, довольно сложно написать здесь код.
Параметры C# setter
и getter
очень эффективны, вы даже можете установить другие свойства при назначении только одного свойства. Пример
public int Id { get;
set {
var extracted = extractAll(value);
this.Id = extracted.Id;
this.UserId = extracted.UserId;
.......
}
}
.Select(x => new CourseModuleView()
{
Id = theString, //assign only Id will automatically assign all properties according to the Id setter logic
}).ToList();
Кстати, вы должны сохранить имя value
в сеттере, если нет, он попытается найти указанную переменную внутри локальной области.
Извините за ошибку, когда вы назначаете свойство в select, оно должно быть того же типа, Id
должно быть присвоено int.
В вашем случае вы можете создать фиктивное свойство типа string затем примените в нем сеттер logi c.
Пример:
public string dummy { get; set { ..... }}
Надеюсь, это сработает для вас.
public void SetEverything(string str)
{
var re = new Regex(@"'(.*?)'");
var results = Regex.Matches(str, @"'(.*?)'", RegexOptions.Singleline)
.Cast<Match>()
.Select(x => x.Groups[1].Value);
this.UserId = int.Parse(results.ElementAt(0));
this.ComponentType = results.ElementAt(1);
this.ModuleId = int.Parse(results.ElementAt(2));
}
public int Id { get; set; }
public int UserId { get; set; }
public int ModuleId { get; set; }
public string ComponentType { get; set; }
public string Setter { get { return ""; } //return empty string
set {
SetEverything(value);
}
}
Тогда
var modCompletedResult = allLog
.Where(x => x.EventName == EventNameMessage.CourseModuleView)
.Select(x => new CourseModuleView()
{
Setter = x.str,
}).ToList();