LINQ to SQL Выберите Различать по нескольким столбцам и вернуть всю сущность - PullRequest
5 голосов
/ 09 сентября 2011

Я работаю со сторонней базой данных, и мне нужно выбрать отдельный набор данных для конкретного рынка, на который я смотрю. Данные одинаковы для каждого рынка, поэтому избыточно их извлекать, и я не хочу жестко кодировать какую-либо логику вокруг них, поскольку мы работаем с поставщиком, чтобы решить проблему, но нам нужно исправить это, работать с исправлениями поставщиков, а также с тем, какова база данных в настоящее время, поскольку может пройти некоторое время, прежде чем их исправление вступит в действие.

Я не хочу группировать по чему-либо, поскольку я хочу получить данные на самом низком уровне, но я не хочу никаких избыточных данных. Мой текущий запрос выглядит примерно так ...

determinantData = (from x in dbContext.Datas
                   where x.Bar.Name.Equals(barName) &&
                         x.Something.Name.Equals(someName) &&
                         FooIds.Contains(x.Foo.Id) &&
                         x.Date >= startDate && 
                         x.Date <= endDate
                   select x).Distinct();

Это не делает то, что я ожидаю. Я хотел бы выбрать отдельные записи по трем свойствам, скажем Foo, Bar и Something, но вернуть весь объект. Как я могу сделать это с помощью LINQ?

1 Ответ

8 голосов
/ 09 сентября 2011

Вы можете использовать group by со свойствами, которые вы хотите выделить, затем выберите первый элемент каждой группы:

determinantData = (from x in dbContext.Datas
                   where x.Bar.Name.Equals(barName) &&
                         x.Something.Name.Equals(someName) &&
                         FooIds.Contains(x.Foo.Id) &&
                         x.Date >= startDate && 
                         x.Date <= endDate
                   group x by new { x.Foo, x.Bar, x.Something } into market 
                   select market).Select( g=> g.First()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...