C# 使用LINQ和C的条件滤波器#
我需要获得一个记录列表,并根据一个条件对其进行筛选:如果serviceId=1,那么我需要将该结果与serviceId=5的结果相结合 型号:C# 使用LINQ和C的条件滤波器#,c#,.net,asp.net-mvc,linq,entity-framework,C#,.net,Asp.net Mvc,Linq,Entity Framework,我需要获得一个记录列表,并根据一个条件对其进行筛选:如果serviceId=1,那么我需要将该结果与serviceId=5的结果相结合 型号: public class Partner { [Key] public int Id { get; set; } public DbGeography Location { get; set; } public virtual ICollection<PartnerServiceBrand> PartnerSe
public class Partner
{
[Key]
public int Id { get; set; }
public DbGeography Location { get; set; }
public virtual ICollection<PartnerServiceBrand> PartnerServiceBrands { get; set; }
}
public class PartnerServiceBrand
{
[Key]
public int Id { get; set; }
public virtual Partner Partner { get; set; }
public virtual Service Service { get; set; }
}
public class Service
{
[Key]
public int Id { get; set; }
public virtual ICollection<PartnerServiceBrand> PartnerServiceBrands { get; set; }
}
我试着做:
if (serviceId == 1)
{
var partners2 = dbContext.Partners.Where(p => p.PartnerServiceBrands.Select(psb => psb.Service.Id).Contains(5));
partners = partners.Union(partners2); // Error
}
我还尝试将Contains
与列表一起使用,但无法启动并运行它
编辑
我得到的错误是:
异常:抛出:“地理数据类型不能选择为独立的,因为它不可比较。”(System.data.SqlClient.SqlException)
也许这会奏效:
var partners = dbContext.Services
.Where(ser => ser.Id == 1 || s.Id == 5).SelectMany(ser => ser.PartnerServiceBrands)
.Select(psb => psb.Partner).Distinct();
我对这件事的看法
给定要筛选的serviceIds
列表:
var serviceIds = new List<int>{1, 5};
var partners = dbContext.Services
.Where(ser => serviceIds.Contains(ser.Id).SelectMany(ser => ser.PartnerServiceBrands)
.Select(psb => psb.Partner).Distinct();
var-serviceIds=新列表{1,5};
var partners=dbContext.Services
.Where(ser=>serviceIds.Contains(ser.Id)。选择many(ser=>ser.PartnerServiceBrands)
.Select(psb=>psb.Partner).Distinct();
假设您有一个DbSet
作为服务
,我会尝试:
var serviceId = ...;
var partners = dbContext.Services
.Where(svc => svc.Id == serviceId || (serviceId == 1 && svc.Id == 5))
.SelectMany(svc => svc.PartnerServiceBrands)
.Select(psb => psb.Partner).Distinct();
出现错误是因为Union()
使用SELECT DISTINCT
生成Union ALL
。作为旁白Concat()
只生成一个Union ALL
在任何情况下,我认为您应该能够通过以下方式获得您想要的:
var serviceIds = new List<int>{ 1, 5 };
var partners = dbContext.Partners
.Where(p => p.PartnerServiceBrands.Any(psb => serviceIds.Contains(psb.Service.Id))
var-serviceIds=新列表{1,5};
var partners=dbContext.partners
.Where(p=>p.PartnerServiceBrands.Any(psb=>serviceIds.Contains(psb.Service.Id))
不清楚您想做什么。您需要在第一个列表中做什么?您想获得所有具有id=1服务的合作伙伴吗?您收到了什么错误消息?@ataravati您好,我想让所有具有serviceId=5的合作伙伴与具有serviceId的所有合作伙伴加入=1@techkid嗨,对不起,我编辑了这个问题h导致错误的错误和缺少的属性(public DbGeography Location{get;set;})Hi,我必须在Contains(ser.Id)之后添加“”,以避免红色编辑器下划线,但在执行过程中,我得到了问题I get repeated partners中包含的错误:(
var serviceIds = new List<int>{ 1, 5 };
var partners = dbContext.Partners
.Where(p => p.PartnerServiceBrands.Any(psb => serviceIds.Contains(psb.Service.Id))