C# 如何按嵌套对象值Linq排序
对象C# 如何按嵌套对象值Linq排序,c#,linq,C#,Linq,对象 namespace Example { public class ContractorAddValue { public Member Member { get; set; } public List<Addresses> Addresses { get; set; } public ICommand AddAddress { get; set; } } public class Addresse
namespace Example
{
public class ContractorAddValue
{
public Member Member { get; set; }
public List<Addresses> Addresses { get; set; }
public ICommand AddAddress { get; set; }
}
public class Addresses
{
public MemberAddress MemberAddress { get; set; }
public ICommand EditAddress { get; set; }
}
}
名称空间示例
{
公共类ContractorAddValue
{
公共成员成员{get;set;}
公共列表地址{get;set;}
公共ICommand AddAddress{get;set;}
}
公共类地址
{
公共成员地址成员地址{get;set;}
公共ICommand编辑地址{get;set;}
}
}
查询
public ObservableCollection<ContractorAddValue> GetContractorsOrderByCity()
{
var allContractors = (from c in db.Member where c.IsContrator == true select c).ToList();
//var allContractors2 = db.Member .Include(c => c.MemberAddress).SelectMany(c => c.MemberAddress).OrderBy(c => c.City).Select(c => c.Member ).ToList();
//var allContractors = (from c in db.Member where c.IsContrator == true select c).OrderBy(c => c.MemberAddress.OrderBy(x => x.City)).ToList(); <= dosent work
var listContractorAddValue = new ObservableCollection<ContractorAddValue>();
foreach (var i in allContractors)
{
var adressList = db.MemberAddress.Where(x => x.MemberId == i.MemberId).OrderBy(x => x.City).ToList();
ContractorAddValue contractorAddValue = new ContractorAddValue();
contractorAddValue.Member = i;
contractorAddValue.AddAddress = new BaseCommand(() => ContractorsViewModel.SendAddress(i.MemberId ));
contractorAddValue.Addresses = new List<Addresses>();
foreach (var a in adressList)
{
Addresses memberAdress = new Addresses();
memberAdress.MemberAddress = a;
memberAdress.EditAddress = new BaseCommand(() => ContractorsViewModel.SendEditAddress(a.MemberAddressId , i.MemberId ));
contractorAddValue.Addresses.Add(memberAdress);
}
listContractorAddValue.Add(contractorAddValue);
}
return listContractorAddValue;
}
public observeCollection getContractorOrderByCity()
{
var allContractors=(来自db.Member中的c,其中c.isContractor==true选择c.ToList();
//var allContractors2=db.Member.Include(c=>c.MemberAddress)。SelectMany(c=>c.MemberAddress)。OrderBy(c=>c.City)。Select(c=>c.Member)。ToList();
//var allcontactors=(从db.Member中的c开始,其中c.iscontactor==true选择c).OrderBy(c=>c.MemberAddress.OrderBy(x=>x.City)).ToList();x.MemberId==i.MemberId.OrderBy(x=>x.City.ToList();
ContractorAddValue ContractorAddValue=新的ContractorAddValue();
contractorAddValue.Member=i;
contractorAddValue.AddAddress=newBaseCommand(()=>ContractorsViewModel.SendAddress(i.MemberId));
contractorAddValue.Addresses=新列表();
foreach(地址列表中的变量a)
{
地址MemberAddress=新地址();
MemberAddress.MemberAddress=a;
MemberAddress.EditAddress=新建BaseCommand(()=>ContractorsViewModel.SendEditAddress(a.MemberAddressId,i.MemberId));
contractorAddValue.Addresses.Add(MemberAddress);
}
添加(contractorAddValue);
}
返回listContractorAddValue;
}
allContractors2-order by有效,但我检索重复成员。在这种方法中,我尝试在Select(c=>c.Member)
之后使用.Distinct()。
我的目标是通过MemberAddress.City
提前谢谢 我认为这段代码可以工作,但您需要重新定义ContractorAddValue类的Equals方法
当您想将contractorAddValue添加到列表中时,我添加了一个if语句。首先,您需要检查列表是否包含该对象。如果没有,则将对象添加到列表中。如果是,则需要找到该对象,并将其地址列表与要添加的对象的地址列表合并
public ObservableCollection<ContractorAddValue> GetContractorsOrderByCity()
{
var allContractors = (from c in db.Member where c.IsContrator == true select c).ToList();
//var allContractors2 = db.Member .Include(c => c.MemberAddress).SelectMany(c => c.MemberAddress).OrderBy(c => c.City).Select(c => c.Member ).ToList();
//var allContractors = (from c in db.Member where c.IsContrator == true select c).OrderBy(c => c.MemberAddress.OrderBy(x => x.City)).ToList(); <= dosent work
var listContractorAddValue = new ObservableCollection<ContractorAddValue>();
foreach (var i in allContractors)
{
var adressList = db.MemberAddress.Where(x => x.MemberId == i.MemberId).OrderBy(x => x.City).ToList();
ContractorAddValue contractorAddValue = new ContractorAddValue();
contractorAddValue.Member = i;
contractorAddValue.AddAddress = new BaseCommand(() => ContractorsViewModel.SendAddress(i.MemberId ));
contractorAddValue.Addresses = new List<Addresses>();
foreach (var a in adressList)
{
Addresses memberAdress = new Addresses();
memberAdress.MemberAddress = a;
memberAdress.EditAddress = new BaseCommand(() => ContractorsViewModel.SendEditAddress(a.MemberAddressId , i.MemberId ));
contractorAddValue.Addresses.Add(memberAdress);
}
if(!listContractorAddValue.Contains(contractorAddValue)){
listContractorAddValue.Add(contractorAddValue);
} else {
var contAddValue = listContractorAddValue.First(l => l.Equals( contractorAddValue));
contAddValue.Addresses.AddRange(contractorAddValue.Addresses);
}
}
return listContractorAddValue;
}
public observeCollection getContractorOrderByCity()
{
var allContractors=(来自db.Member中的c,其中c.isContractor==true选择c.ToList();
//var allContractors2=db.Member.Include(c=>c.MemberAddress)。SelectMany(c=>c.MemberAddress)。OrderBy(c=>c.City)。Select(c=>c.Member)。ToList();
//var allcontactors=(从db.Member中的c开始,其中c.iscontactor==true选择c).OrderBy(c=>c.MemberAddress.OrderBy(x=>x.City)).ToList();x.MemberId==i.MemberId.OrderBy(x=>x.City.ToList();
ContractorAddValue ContractorAddValue=新的ContractorAddValue();
contractorAddValue.Member=i;
contractorAddValue.AddAddress=newBaseCommand(()=>ContractorsViewModel.SendAddress(i.MemberId));
contractorAddValue.Addresses=新列表();
foreach(地址列表中的变量a)
{
地址MemberAddress=新地址();
MemberAddress.MemberAddress=a;
MemberAddress.EditAddress=新建BaseCommand(()=>ContractorsViewModel.SendEditAddress(a.MemberAddressId,i.MemberId));
contractorAddValue.Addresses.Add(MemberAddress);
}
如果(!listContractorAddValue.Contains(contractorAddValue)){
添加(contractorAddValue);
}否则{
var contAddValue=listContractorAddValue.First(l=>l.Equals(contractorAddValue));
contAddValue.Addresses.AddRange(contractorAddValue.Addresses);
}
}
返回listContractorAddValue;
}
似乎一个成员可以有多个地址,那么这不是出现重复成员的原因吗?如果成员有多个地址,该怎么办?“一个成员似乎有多个地址”—是的,成员可以有多个地址“如果成员有多个地址,该怎么办?”地址列表嵌套在成员列表中,成员不应重复。我通过试错法找到了答案-distinct()dosent work anyware at query,但在loop works==>foreach(allcontactors.distinct()中的var I)