Linq到实体返回一个包含来自另一个列表的元素的列表
本文关键字:列表 包含 另一个 一个 元素 实体 返回 Linq | 更新日期: 2023-09-27 18:08:27
我已经重复尝试了不同的事情来做到这一点。我需要查询一个数据库,只返回有包含在一个列表中的日期的记录-像一个动态的"在哪里"语句。我确信它会涉及到=>,但不能得到语法正确。
我在下面建立一个简短的列表来测试,但它可以有任何数量的项目。
下面的只需要返回total的记录。datesToShow中包含date_reference。
List<DateTime> datesToShow = new List<DateTime>();
datesToShow.Add(new DateTime(2016, 9, 22));
datesToShow.Add(new DateTime(2016, 9, 21));
var todays_totals = (from total in dbContext.daily_totals
select new
{
total.customer.customer_name,
total.date_reference,
total.EDI_PODs_sent,
total.open_stops,
total.total_pieces,
total.new_stops,
total.total_weight,
total.Unsent_PODs_released,
total.Unsent_PODs_unreleased,
total.last_updated
}).ToArray();
如果我这样做:
var todays_totals = (from total in dbContext.daily_totals
select new
{
total.customer.customer_name,
total.date_reference,
total.EDI_PODs_sent,
total.open_stops,
total.total_pieces,
total.new_stops,
total.total_weight,
total.Unsent_PODs_released,
total.Unsent_PODs_unreleased,
total.last_updated
}).Where(el => datesToShow.Contains(el.date_reference)).ToArray();
我得到一个"未知方法在哪里(?)…"我试过使用列表和数组,如:
DateTime[] datesToShow = new DateTime[]
{
new DateTime (2016,9,22),
new DateTime (2016,9,23)
};
我也可以使用todays_totals的子集作为新的结果集。如下所示(我实际上是从这里开始的)
var newList = (from t in todays_totals where (t=>datesToShow.Contains(t.date_reference))).ToArray();
您可以尝试使用Contains
扩展方法:
var todays_totals = (from total in dbContext.daily_totals
where datesToShow.Contains(DbFunctions.TruncateTime(total.date_reference))
select new
{
total.customer.customer_name,
total.date_reference,
total.EDI_PODs_sent,
total.open_stops,
total.total_pieces,
total.new_stops,
total.total_weight,
total.Unsent_PODs_released,
total.Unsent_PODs_unreleased,
total.last_updated
}).ToArray();
DbFunction.TruncateTime
将帮助您清洁您的日期,以防它们随时间而来。
有两种方法可以做你想做的事情,这基本上是相同的:
-
使用LINQ
where
语句。它们可以接受任何返回bool
的有效c#表达式:(from total in dbContext.daily_totals where datesToShow.Contains(total.date_reference) select new { // your select items... }).ToArray();
-
为
WHERE
子句使用LINQ扩展方法,如您所指出的,它将包含一个lambda表达式:(from total in dbContext.daily_totals select new { // your select items... }) .Where(el => datesToShow.Contains(el.date_reference)) .ToArray();
使用Lambda表达式
List<DateTime> datesToShow = new List<DateTime>();
datesToShow.Add(new DateTime(2016, 9, 22));
datesToShow.Add(new DateTime(2016, 9, 21));
var todays_totals = dbContext.daily_totals.Where(o=> datesToShows.Contains(o.date_reference)).ToList();
//Result should be a list that contains records that match those 2 dates.
希望这对你有帮助!