Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq to sql统计接受的条件_C#_Sql_Linq To Sql - Fatal编程技术网

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; }
}