C# 使用linq to sql统计接受的条件
我正在尝试实现对我的数据库的搜索,我的数据库正在搜索很多列。对于输出,我想对搜索值在不同列中出现的频率的结果进行排序 例如,我有一个类似以下的查询:C# 使用linq to sql统计接受的条件,c#,sql,linq-to-sql,C#,Sql,Linq To Sql,我正在尝试实现对我的数据库的搜索,我的数据库正在搜索很多列。对于输出,我想对搜索值在不同列中出现的频率的结果进行排序 例如,我有一个类似以下的查询: from model in dataContext.Models where model.Name.Equals(value) || model.Description.Contains(Value) select model 是否可以在实体中添加一个变量,该变量存储每个truewhere子句的count+1计数器 在本例中,如果值测试在mode
from model in dataContext.Models
where model.Name.Equals(value) || model.Description.Contains(Value)
select model
是否可以在实体中添加一个变量,该变量存储每个true
where子句的count+1计数器
在本例中,如果值测试在model.Name
和model.Description
中,则如果仅在model.Name
中,则计数为2,依此类推
因此,在简单的c#中,它将执行此方法的工作:
public List<Object> GetAllModelsWithValue(string value)
{
List<Object> Models = new List<Object>();
forach(var model in dataContext.Models)
{
var count =0;
var modelCorrect = false;
if( model.Name.Equals(value))
{
count =+1;
modelCorrect = true;
}
if(model.Description.Contains(Value))
{
count =+1;
modelCorrect = true;
}
if(modelCorrect )
{
Models.Add(new{model,count});
}
return Models;
}
sql之外的搜索将大大降低搜索速度,因此我的想法是将搜索引入sql。创建包含匹配信息的新类型怎么样? 例如:
from model in dc.Models
where model.Name.Equals(value) || model.Description.Contains(value)
select new ModelMatches
{
Matches = (model.Name.Equals(value) ? 1 : 0) + (model.Description.Contains(value) ? 1 : 0),
Model = model
};
public class ModelMatches
{
public Model Model { get; set; }
public int Matches { get; set; }
}
或者,如果您需要确定哪些列匹配,您可以根据匹配计算一些位掩码。您可以发布模型的定义以及您拥有和想要的具体示例吗?谢谢因为不能调用非SQL方法,所以不能在LINQtoSQL中运行。而不仅仅是去规范化函数。修正了答案,避免了混乱。
from model in dc.Models
where model.Name.Equals(value) || model.Description.Contains(value)
select new ModelMatches
{
Matches = (model.Name.Equals(value) ? 1 : 0) + (model.Description.Contains(value) ? 1 : 0),
Model = model
};
public class ModelMatches
{
public Model Model { get; set; }
public int Matches { get; set; }
}