我有一个非常复杂的实体框架问题,我不知道如何用SQL或EF编写我的查询。
我的表是这样的:
RecordId - int
ListId - int
ScreenName - string
Name - string
Description - string
Community - string
Value1 - decimal
Value2 - decimal
Value3 - decimal
我想搜索此表,我需要根据ScreenName和Community的组合来区分结果。换句话说,如果有多个具有相同ScreenName和Community的记录,我只想要一行。如果有多个记录具有相同的ScreenName和两个不同的社区,那么我将获得2条记录。
我想要完整的行,而不仅仅是ScreenName和社区。
在对记录进行分组时,如果我可以根据ListId选择要保留哪条记录(越低越好),这将是理想的。
是否可以执行我在实体框架中提出的任何内容?
答案 0 :(得分:1)
经过大量研究和大量时间对SQL Server感到沮丧,我终于弄清楚了
SQL
select * from ListRecord lr
where ListRecordId =
(
select top 1 ListRecordId
from ListRecord
where ScreenName = lr.ScreenName
and Community = lr.Community
order by ListId
)
实体框架
var query = from x in db.ListRecords
where x.ListRecordId == (
db.ListRecords.Where(y => y.ScreenName == x.ScreenName && y.Community == x.Community)
.OrderBy(y => y.ListId)
.Select(y => y.ListRecordId).FirstOrDefault()
)
select x;
var list = query.ToList();