Использование Linq to Entities для поиска лучшего соответствия в таблице - PullRequest
0 голосов
/ 03 ноября 2010

У меня есть таблица с двумя столбцами, которые будут использоваться в качестве критериев фильтрации.Используя Linq to Entities, я хочу передать два значения и всегда возвращать наиболее близкое совпадение.Например, (1,2) должен возвращать (1,2), а не (ноль, 2) в качестве ближайшего.Если ни одно из значений не находит совпадения, то используется совпадение столбца Null, Null.

Ниже приведен пример кода.

Если в первых данных передано 3,3 (null, null)должен быть возвращен, так как нет совпадений.

Если передано 1,3, должны быть возвращены вторые данные (1, ноль).

Если передано 3,2,должны быть возвращены третьи данные (null, 2).

Если передано 1,2, должны быть возвращены четвертые данные (1,2).

Возможно ли это сделать в одномLinq-запрос, поскольку он генерирует попадание в базу данных?

public class Data
        {
            public string prop1 { get; set; }
            public  string prop2 { get; set; }
        }

        static void Main(string[] args)
        {
            List<Data> datas = new List<Data>
                                   {
                                       new Data
                                           {
                                               prop1 = null,
                                               prop2 = null
                                           },
                                       new Data
                                           {
                                               prop1 = "1",
                                               prop2 = null
                                           },
                                       new Data
                                           {
                                               prop1 = null,
                                               prop2 = "2"
                                           },
                                       new Data
                                           {
                                               prop1 = "1",
                                               prop2 = "2"
                                           }
                                   };


        }

1 Ответ

1 голос
/ 03 ноября 2010

Может просто сделать что-то вроде

    Data def = new Data { prop1 = null, prop2 = null };
    var result = (from d in datas
                  where d.prop1 == value1 || d.prop2 == value2
                  orderby (d.prop1 == value1 ? 8 : 0) + (d.prop2 == value2 ? 4 : 0) + (d.prop1 == null ? 2: 0) + (d.prop2 == null ? 1 : 0) descending
                  select d).FirstOrDefault() ?? def;

, где значения1 и значение2 - это две строки для поиска, должны выполняться как 1 запрос (не проверял)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...