c# - select new 中的 Linq where 子句

标签 c# linq entity-framework-core

我有 2 个表,我们称它们为 t1 和 t2。 t1 有一个 ID、一个字符串和一个 bool 值。 t2 有一个 ID、一个日期和一个 t1.ID。 我想将它们放入我的类(class)列表中。

public class MyClass {
    public string Name {get; set;}
    public DateTime Date1 {get; set;}
    public Datetime Date2 {get; set;}
}

(它有 15 个日期,为了保持较小,我只放了两个)

我找到了解决方案:

List<MyClass> list = (from t2 in con.t2
                      join t1 in con.t1 on t2.T1ID equals t1.ID
                      select t2).GroupBy(d => d.T1ID).Select(x => new MyClass()
{
    Name = x.FirstOrDefault().t1.Name,
    Date1 = x.where(d => d.ID == 1).SingleOrDefault().Date,
    Date2 = x.where(d => d.ID == 2).SingleOrDefault().Date
}).ToList();

它按预期工作,但问题是,我从 Visual Studio 收到此警告:

The LINQ expression 'GroupBy([t2].T1ID)' could not be translated and will be evaluated locally.

它出现了好几次。此消息也适用于 SingleOrDefault。我测试了一些,如果我把 where 放在 select new 中,它就会出现。

那么我该如何改变我的表情来避免这种情况呢?或者我的表达很糟糕,我可以做得更好? (我无法更改表结构)

最佳答案

我相信这仍然是 EF 的一个限制。只需注意查询使用的内存,因为警告会提醒您这样做。

问候。

关于c# - select new 中的 Linq where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907453/

相关文章:

c# - 查找背包中的元素

c# - 在 FindAll 函数中使用 List -C# LinQ

entity-framework - 全局禁用EF Core 2上的级联删除

azure - 在发布 ASP.NET Core Web 应用程序之前应在 Azure 上配置哪些内容?

c# - 无法在 .NET Core for Async 方法中访问 DbContext 的处置对象

c# - 单元测试在 try catch block 中调用异步操作的 getter

c# - 将 Entity Framework 与 MySQL 一起使用时,Unicode 字符将替换为基本字符

c# - 在 C# 中将数据导入 Cassandra Cluster 的最佳方法

c# - 我可以从使用 Linq to sql 的过程中接收返回值和结果集吗?

c# - 如何在 Linq 中获得左外连接?