实体框架 - 在2列上不同但返回所有数据

时间:2013-09-24 10:23:22

标签: sql entity-framework entity-framework-5

我有一个非常复杂的实体框架问题,我不知道如何用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选择要保留哪条记录(越低越好),这将是理想的。

是否可以执行我在实体框架中提出的任何内容?

1 个答案:

答案 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();