【问题标题】:Marshalling data from a linq query into .NET object将来自 linq 查询的数据编组到 .NET 对象中
【发布时间】:2017-01-19 00:06:01
【问题描述】:

我有一个名为 EventInfo 的类:

public class EventInfo
{
    public string EventName { get; set; }
    public string EventDateRange { get; set; }
}

并且使用实体框架/linq 到实体我想从 LINQ 命令的结果构造 EventInfo 类型的 ab 对象。

我有这个:

using (var dataContext = new DataContext())
{
    var x =
        from event in dataContext.Events
        where event.EventID == 10
        select new EventInfo
        {
            EventName = event.ShowName,
            EventDateRange = $"{event.StartDate} - {event.EndDate}"
        };
}

但是 x 属于 IQueryable[EventInfo] 类型,我需要对其执行 .FirstOrDefault 并检查是否为空。

有没有办法直接做到这一点?

【问题讨论】:

  • 如;您想在 LINQ 查询中提供默认值吗?不知道你在问什么
  • 如果您需要第一个事件匹配查询,调用 FirstOrDefault 有什么问题?
  • 你可以做var x = (from ... {...}).FirstOrDefault();
  • 你的 EF 可以在表达式中插入字符串吗?

标签: c# entity-framework linq


【解决方案1】:

你是说这个吗?

using (var dataContext = new DataContext())
{
    var x =(
        from event in dataContext.Events
        where event.EventID == 10
        select new EventInfo
        {
            EventName = event.ShowName,
            EventDateRange = $"{event.StartDate} - {event.EndDate}"
        }).FirstOrDefault();
}

【讨论】:

  • 但是当我返回这个我不知道它是否真的是一个事件或空/默认
  • @andrewb 嗯,是的,你必须检查一下......你想要它做什么?
  • @andrewb 当你运行这个查询时,你不知道你的数据库中是否有匹配的记录。这就是为什么你需要null 选项来获得结果
  • @andrewb 你真的不知道如何检查 x 是否为空? if(x== null){}
【解决方案2】:

试试这个:

using (var dataContext = new DataContext())
{
    var x = dataContext.Events
        .Where(x => x.EventID == 10)
        .Select(x => new EventInfo()
        {
              EventName = x.Name,
              EventDateRange = $"{x.StartDate} - {x.EndDate}"
        })
        .FirstOrDefault();
}

if (x == null) {
    // there was no result
}
else {
    // Result found, and x is EventInfo
}

虽然,您可能更愿意将 x 返回给调用者,然后检查它是否为 null 并采取相应措施,而不是检查 x 是否为 null。

【讨论】:

  • 是的,我使用了类似的方法,但是 EventDateRange 分配行会引发与格式相关的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多