C# C Linq从列表中查询,以仅从另一个列表中选择具有相同id的记录
我有一张物品清单。我想从列表中选择项,并对所选项执行foreach操作。然后获取包含该站点的数据 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{
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();