c#Linq获得准确值

时间:2017-01-31 22:05:49

标签: c# linq filtering

我需要将确切的字符串值与数据库进行比较。

  e.g. string vals = "bicycle_store,clothing_store"

在数据库中我有其他值包含单词“store”,例如electronics_store

当我执行下面的linq时,它发现所有包含“store”字样。如何更新linq以便它只将“selected = true”设置为已发送的内容

        return (from x in _ctx.Category
                select new CategoryVM
                {
                    Text = x.Text,
                    Value = x.Value,
                    Selected = vals.Contains(x.Value) == true ? true : false

                }).ToList(); 

2 个答案:

答案 0 :(得分:1)

使用where

return (from x in _ctx.Category
        where vals.Contains(x.Value)
        select new CategoryVM
        {
            Text = x.Text,
            Value = x.Value
        }).ToList(); 

如果要将输出限制为完全的给定输入,请不要使用单个字符串。如果给定值完全在字符串中,String.Contains将返回true,因此"bicycle_store".Contains("store")将返回true,因为单词" store"存在于单词" bicycle_store"。

相反,请使用字符串数组。如果字符串与其中一个元素完全匹配,则数组上的Contains将仅返回true。

string[] valsArray = vals.Split(',');

return (from x in _ctx.Category
        where valsArray.Contains(x.Value)
        select new CategoryVM
        {
            Text = x.Text,
            Value = x.Value
        }).ToList(); 

答案 1 :(得分:1)

您应首先拆分值:

string vals = "bicycle_store,clothing_store";
string[] values = vals.Split(',');

return (from x in _ctx.Category
        select new CategoryVM
        {
            Text = x.Text,
            Value = x.Value,
            Selected = values.Contains(x.Value)
        }).ToList(); 

这将转换为SQL IN语句。