C# 使用Linq to实体查找表中的最佳匹配
我有一个包含两列的表,将用作筛选条件。使用Linq to实体,我希望传入两个值并始终返回最接近的匹配。例如,(1,2)应该返回(1,2)not(null,2)作为最近的。如果两个值均未找到匹配项,则使用Null、Null列匹配项 下面是示例代码 如果传入3,3,则应返回第一个数据(null,null),因为没有匹配项 如果传入1,3,则应返回第二个数据(1,null) 如果传入3,2,则应返回第三个数据(null,2) 如果传入1,2,则应返回第四个数据(1,2) 这是否可能在一个Linq查询中实现,因为它正在生成数据库命中C# 使用Linq to实体查找表中的最佳匹配,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我有一个包含两列的表,将用作筛选条件。使用Linq to实体,我希望传入两个值并始终返回最接近的匹配。例如,(1,2)应该返回(1,2)not(null,2)作为最近的。如果两个值均未找到匹配项,则使用Null、Null列匹配项 下面是示例代码 如果传入3,3,则应返回第一个数据(null,null),因为没有匹配项 如果传入1,3,则应返回第二个数据(1,null) 如果传入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"
}
};
}
公共类数据
{
公共字符串prop1{get;set;}
公共字符串prop2{get;set;}
}
静态void Main(字符串[]参数)
{
列表数据=新列表
{
新数据
{
prop1=null,
prop2=null
},
新数据
{
prop1=“1”,
prop2=null
},
新数据
{
prop1=null,
prop2=“2”
},
新数据
{
prop1=“1”,
prop2=“2”
}
};
}
可以简单地执行以下操作
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查询运行(未测试)这不包括prop1或prop2不匹配的情况,我想返回null,null条目。Hrm,只需将其添加为额外的null检查?将示例更改为显示,如果您希望它从集合中获取第一个值,只需删除完整的where行即可。如果列表中的数据顺序发生更改,这也不起作用:/例如,切换条目3和4将导致(3,2)返回(1,2)。但您并没有说希望在填充的值上使用空值