我有 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/