C# 使用LINQ和C的条件滤波器#

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

我需要获得一个记录列表,并根据一个条件对其进行筛选:如果serviceId=1,那么我需要将该结果与serviceId=5的结果相结合

型号:

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))