C#LINQ数据时间列表

时间:2015-04-26 18:35:03

标签: c# linq entity-framework list datetime

转换为列表时出现问题

public List<DateTime> findDateBetween(DateTime start,DateTime end)
{
    var query = from entry in sd.gw_chemistry
                where (entry.insert_datetime >=start & entry.insert_datetime<=end & a == entry.well_id & b == entry.indicator_id)
                select entry.insert_datetime;
    return (List<DateTime>)query;
}`
  

错误:   System.InvalidCastException:无法转换类型&#34; System.Data.Objects.ObjectQuery 1[System.Nullable 1 [System.DateTime]]&#34;输入&#34; System.Collections.Generic.List`1 [System.DateTime]&#34;。

4 个答案:

答案 0 :(得分:3)

您的代码存在许多问题。

  • 您的查询正在选择DateTime?(或Nullable<DateTime>)类型的元素。如果日期为null,您需要决定要执行的操作。从结果中排除它?返回默认值?如果您确定它永远不会是null,则可以select entry.insert_datetime.Value
  • 您的查询未返回列表,您必须使用ToList()将其转换为列表。
  • 对于条件AND运算符(&&),您似乎正在使用&
  • 您使用的变量ab似乎没有在任何地方定义(除非它们是成员变量)。

因此,假设ab是成员变量,insert_datetime永远不是null,您可以这样做:

return sd.gw_chemistry
   .Where(e =>
        e.insert_datetime >= start && e.insert_datetime <= end && 
        a == entry.well_id && b == entry.indicator_id)
   .Select(e => e.insert_datetime.Value)
   .ToList();

答案 1 :(得分:0)

由于错误试图告诉您,这不是List<T>,而您无法将其转换为不属于的类型。

您可以通过调用List<T>从查询中创建.ToList()

答案 2 :(得分:0)

这里没什么大不了的。您只需在ToList()上致电query即可。但是,我确实看到使用&代替&&是一个严重的问题。

正确的代码应如下所示:

public List<DateTime> findDateBetween(DateTime start,DateTime end)
{
    var query = 
              from entry in sd.gw_chemistry
              where (entry.insert_datetime >=start && 
                     entry.insert_datetime<=end && 
                     a == entry.well_id && 
                     b == entry.indicator_id)
            select entry.insert_datetime.Value;
    return query.ToList();
}`

答案 3 :(得分:0)

public List<DateTime> findDateBetween(DateTime start,DateTime end)
    {var query = from entry in sd.gw_chemistry
        where (entry.insert_datetime >=start & entry.insert_datetime<=end & a == entry.well_id & b == entry.indicator_id)
        select entry.insert_datetime;
        return query.ToList();}