C# C Linq从列表中查询,以仅从另一个列表中选择具有相同id的记录

C# C Linq从列表中查询,以仅从另一个列表中选择具有相同id的记录,c#,linq,C#,Linq,我有一张物品清单。我想从列表中选择项,并对所选项执行foreach操作。然后获取包含该站点的数据 C Linq从列表中查询,以仅从另一个列表中选择具有相同id的记录 模型 地点清单 public class Site { public string Name{ get; set; } public int SiteNo{ get; set; } } public class StudentSite { public string Username{

我有一张物品清单。我想从列表中选择项,并对所选项执行foreach操作。然后获取包含该站点的数据

C Linq从列表中查询,以仅从另一个列表中选择具有相同id的记录

模型

地点清单

public class Site
{
    public string Name{ get; set; }
    public int SiteNo{ get; set; }          
}

public class StudentSite
{
    public string Username{ get; set; }
    public string { get; set; }
    public IList<Site> SiteNo { get; set; }
    public DateTime? DateReceived { get; set; }
    public string firstname { get; set; }
    public string DataEntryUser { get; set; }
    public DateTime? CreatedDate { get; set; }
    public int? Count { get; set; }
}

var user = repository.Get(userid);  //it return me the list of sites 10 sites 

results_temp12 = (from workstation in _entitiesCTRS2.AidsM.OrderBy(c => c.Lab_ID )       
                 where user.User_InvSites.ToList().
                 ForEach(c => c.Inv_Site.SITE_NO
                    .Where( w=> workstation.Site_Number == c.Inv_Site.SITE_NO)
                    .ToList()) 
                    select new 
                    StudentSite
                    {
                        firstname = workstation.First_Name,
                        CreatedDate = workstation.Entered_dt,
                        scanid = workstation.Scan_ID,
                        labid = workstation.Lab_ID,
                        SiteNo = workstation.Site_Number,
                        DateReceived = workstation.Date_Received,
                        DataEntryUser = workstation.Entered_By                                
                    }).ToList();

你到底想要什么,真是太不清楚了。但我从你的问题中得到了两种可能性:

// Inner join: Only returns foos where foo.Id exists in bars
var results = from foo in foos
              join bar in bars on foo.Id equals bar.Id
              select foo;

// Gets all foos if it contains at least one element found in another list
var results = from foo in foos
              where foo.Sites.Select(f => f.Id).Any(s => bars.Any(b => s == b.Id))
              select foo;
这很简单:

list1.Where(item1 => list2.Any(item2 => item1.Id == item2.Id));
这将为您提供列表1中ID位于列表2中的每个项目。

更改where条件以使用Any而不是Foreach

您可以使用“在站点上加入”和“转换结果”

results_temp12 = (from workstation in _entitiesCTRS2.AidsM.OrderBy(c => c.Lab_ID)
                          join user_site in user.User_InvSites on workstation.Site_Number equals user_site.SITE_NO
                          select new StudentSite
                          {
                              firstname = workstation.First_Name,
                              CreatedDate = workstation.Entered_dt,
                              scanid = workstation.Scan_ID,
                              labid = workstation.Lab_ID,
                              SiteNo = workstation.Site_Number,
                              DateReceived = workstation.Date_Received,
                              DataEntryUser = workstation.Entered_By
                          }).ToList();

专业提示:请整理您的代码和问题格式-这是无法忍受和无法阅读的。用户是如何使用的?为什么您从存储库中获取而不使用它?@Kyle当我试图在查询中添加用户时,我发现erro无法将void转换为bool@Kyle其中user.user\u InvSites.ToList.ForEachc=>c.Inv\u Site.Site\u NO.Wherew=>workstation.Site\u Number==c.Inv\u Site.Site\u NO.tolistI获取错误无法创建类型为“?”的常量值。此上下文中仅支持基元类型或枚举类型。LINQ to Entities无法识别方法“System.Collections.Generic.List1[CTLSModel.User\u InvSites]ToList[User\u InvSites]System.Collections.Generic.IEnumerable1[CTLSModel.User\u InvSites]”方法,并且此方法无法转换为存储表达式。
results_temp12 = (from workstation in _entitiesCTRS2.AidsM.OrderBy(c => c.Lab_ID)
                          join user_site in user.User_InvSites on workstation.Site_Number equals user_site.SITE_NO
                          select new StudentSite
                          {
                              firstname = workstation.First_Name,
                              CreatedDate = workstation.Entered_dt,
                              scanid = workstation.Scan_ID,
                              labid = workstation.Lab_ID,
                              SiteNo = workstation.Site_Number,
                              DateReceived = workstation.Date_Received,
                              DataEntryUser = workstation.Entered_By
                          }).ToList();