我需要将确切的字符串值与数据库进行比较。
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();
答案 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
语句。