C# 重用linq语句中的select新对象
下面是我的linq代码,它可以工作。我的问题是如何“重用”函数中的新ContactResponse和新AddressResponse部分,以便在另一个查询中重用它C# 重用linq语句中的select新对象,c#,linq,asp.net-core,C#,Linq,Asp.net Core,下面是我的linq代码,它可以工作。我的问题是如何“重用”函数中的新ContactResponse和新AddressResponse部分,以便在另一个查询中重用它 var queryset = ( from a in _repoWrapper.Workshop.FindAll() where (a.IsActive == true && a.Entity.EntityType.Code == Global.EntityTypeSer
var queryset = (
from a in _repoWrapper.Workshop.FindAll()
where (a.IsActive == true && a.Entity.EntityType.Code == Global.EntityTypeServiceCenterCode)
select new ServiceCenterResponse
{
Id = a.Id,
Name = a.Name,
EntityId = a.EntityId,
Contacts = a.WorkshopContacts.Select(p => new ContactResponse
{
Id = p.Contact.Id,
Type = p.Contact.ContactType.Description,
Code = p.Contact.ContactType.Code,
Value = p.Contact.Value
}).ToList(),
Addresses = a.WorkshopAddresses.Select(p => new AddressResponse
{
Id = p.Address.Id,
AddressType = p.Address.AddressType.Code,
StreetLine1 = p.Address.StreetLine1,
StreetLine2 = p.Address.StreetLine2,
City = p.Address.City,
State = p.Address.State,
PostCode = p.Address.PostCode,
Country = p.Address.Country,
Longitude = p.Address.Longitude,
Latitude = p.Address.Latitude,
Others = p.Address.Others
}).ToList()
}
);
Linq在Select方法中有一个Func类型的参数。这意味着您可以向它传递一个方法。 让我试着做一个例子
List<int> list = new List<int> { 1, 2, 3 };
list.Select(AddOne);
如果我正确理解您的问题,请尝试以下方法:
Func<WorkshopContact, ContactResponse> contactResponseProjection= p => new ContactResponse
{
Id = p.Contact.Id,
Type = p.Contact.ContactType.Description,
Code = p.Contact.ContactType.Code,
Value = p.Contact.Value
};
你能给我们一个例子说明你将如何使用这些可重新密封的查询吗?创建一个方法,比如CreateContactResponse,它接受WorkshopContact参数并返回一个ContactResponse对象,然后使用类似于
a.WorkshopContacts.Select(p=>CreateContactResponse(p)).ToList()
Func<WorkshopContact, ContactResponse> contactResponseProjection= p => new ContactResponse
{
Id = p.Contact.Id,
Type = p.Contact.ContactType.Description,
Code = p.Contact.ContactType.Code,
Value = p.Contact.Value
};
...
Contacts = a.WorkshopContacts.Select(contactResponseProjection).ToList(),
...