与Linq一样或有条件

时间:2013-08-20 14:33:03

标签: linq entity-framework

我有一个场景,我想搜索多个值和类似的。 例如: 如果我有一个类似

的序列
string[] codeValues={"Anthrax","anth","coliblex"};

我想搜索'%Anthrax%'或“%anth%”或“%coliblex%”。 目前我有这个代码只返回与精确匹配的值 搜索价值。

string[] codeValues = {"anthrax"};
var obj=(from icdcodes in M_ICD_CPT_CODEs
where icdcodes.ROW_STATUS==1
      && icdcodes.FK_USER_ID==0
      && icdcodes.FK_CODE_TYPE_ID==240000     
      && codeValues.Contains(icdcodes.CHAR255)
      && icdcodes.MODULE_PHYS_PREF==0
select new 
{
  PkId=icdcodes.PK_ICD_CPT_CODE_ID,
  CodeValue=icdcodes.CODE_VALUE,
  Narrative = icdcodes.CHAR255
}).ToList();

Console.Write(obj);

是否有任何可以过滤的解决方案。 等效 sql 将为
其中CHAR255喜欢'%炭疽%'或CHAR255喜欢'%someothervalue%'..等等


感谢

2 个答案:

答案 0 :(得分:1)

您需要使用AnyContains

string[] codeValues = {"anthrax"};
var obj=(from icdcodes in M_ICD_CPT_CODEs
where icdcodes.ROW_STATUS==1
      && icdcodes.FK_USER_ID==0
      && icdcodes.FK_CODE_TYPE_ID==240000     
      && codeValues.Any(cv => icdcodes.CHAR255.Contains(cv))
      && icdcodes.MODULE_PHYS_PREF==0
select new 
{
  PkId=icdcodes.PK_ICD_CPT_CODE_ID,
  CodeValue=icdcodes.CODE_VALUE,
  Narrative = icdcodes.CHAR255
}).ToList();

答案 1 :(得分:1)

试试这个:

string[] codeValues = {"anthrax"};
var obj=(from icdcodes in M_ICD_CPT_CODEs
where icdcodes.ROW_STATUS==1
  && icdcodes.FK_USER_ID==0
  && icdcodes.FK_CODE_TYPE_ID==240000     
  && codeValues.Any(val => icdcodes.CHAR255.Contains(val))
  && icdcodes.MODULE_PHYS_PREF==0
select new 
{
  PkId=icdcodes.PK_ICD_CPT_CODE_ID,
  CodeValue=icdcodes.CODE_VALUE,
  Narrative = icdcodes.CHAR255
}).ToList();

LINQ: Entity string field contains any of an array of strings