代码之家  ›  专栏  ›  技术社区  ›  Kenoyer130

使用Linq to Entities查找表中的最佳匹配项

  •  0
  • Kenoyer130  · 技术社区  · 14 年前

    下面是示例代码。

    如果传入3,则应返回第一个数据(null,null),因为没有匹配项。

    如果传入1,3,则应返回第二个数据(1,null)。

    如果传入3,2,则应返回第三个数据(null,2)。

    如果传入1,2,则应返回第四个数据(1,2)。

    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 回复  |  直到 14 年前
        1
  •  1
  •   Doggett    14 年前

    可以做一些类似的事情

        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;
    

    其中value1和value2是要搜索的2字符串,应作为1查询运行(未测试)