I have a field which is a collection of a model ICollection "Parties", which is in another model "Matter". I want to extract the Name and Surname of each party and separate with a "/" using LINQ. I am putting these into a field called Investors, the second last item.
This is my query:
var matterQuery = (from matter in context.Matters
select new
{
matter.ID,
matter.AttorneyRef,
matter.Status,
matter.ProductType,
matter.IsDiscarded,
matter.Base_CreatedDate,
matter.Base_CreatedBy,
matter.BranchID,
matter.InstitutionID,
matter.InvestmentTypeID,
StatusName = matter.MatterStatu != null ? matter.MatterStatu.Name : string.Empty,
ProductTypeName = matter.ProductType1 != null ? matter.ProductType1.Name : string.Empty,
AccountNumber = matter.Account != null ? matter.Account.AccountNumber : string.Empty,
CreatedBy = matter.Paralegal != null ? matter.Paralegal
: matter.AspNetUser != null ? matter.AspNetUser.FirstName + " " + matter.AspNetUser.LastName
: matter.User != null ? matter.User.Firstname + " " + matter.User.Surname
: string.Empty,
IntermediaryName = matter.IntermediaryBranch != null ? matter.IntermediaryBranch.Intermediary.Name
: matter.Attorney != null ? matter.Attorney.AttorneyName
: string.Empty,
CloseRequested = matter.CloseAccounts.Where(x => x.Status == (int)CloseAccountStatusEnum.Authorised).Count() > 0,
StatementRequested = matter.Account != null ? matter.Account.StatementRequested : false,
RequestedDate = matter.RequestedDate.HasValue ? matter.RequestedDate.Value : matter.Base_CreatedDate,
Investors = matter.Parties.Select(x => x.Name.ToString()).Concat(matter.Parties.Select(x => x.Surname.ToString())),
SoftLock = matter.SoftLock,
})
.AsQueryable();
I need this in 1 long string as I am doing a search on the results for a filter and the following line:
(x.Investors != null && x.Investors.ToLower().Contains(search))
requires it be in a string format. I want to display the results as "Name1 Surname1 / Name2 Surname2 / ..."
How can I do this?
EDIT:
I have tried Join and Aggregate but I get the errors:
base {System.SystemException} = {System.NotSupportedException: LINQ to Entities does not recognize the method 'System.String Join(System.String, System.Collections.Generic.IEnumerable`1[System.String])' method, and this method cannot be translated into a store expression. at System.Da...
and...
System.NotSupportedException: LINQ to Entities does not recognize the method 'System.String Aggregate[String](System.Collections.Generic.IEnumerable1[System.String], System.Func
3[System.String,System.String,System.String])'
I solved this by:
In the original query:
select new{
Investors = matter.Parties.Select(x => x.Name + " " + x.Surname),
}
In the search:
matterQuery.Where(x =>
(x.Investors.Any(y => y.ToLower().Contains(searchString)))
);
When transferring data to a ViewModel:
Investors = String.Join(" / ", matter.InvestorNames),