0

我有一个关于像这样制作 LINQ 的简短问题:我必须根据名为“事件名称”的字段从数据库中找到一个记录“事件”。该字段可以是“%abc”或“abc%”或“%abc%”,具体取决于每个特定情况。

int pos; 
//define the position of % in finding string, pos=1: %abc, pos=2: abc%, pos=3: %abc%

var SQLquery =
  (from event evn in database.events
    where (
       case pos=1: evn.CarNumber.EndsWith(string))
       case pos=2: evn.CarNumber.StartsWith(string))
       case pos=3: evn.CarNumber.Contains(string))
    select new DataRecord
       {
       ...
       };

有没有办法处理这种情况?提前致谢。

感谢 King King,它适用于

var SQLquery =
  (from event evn in database.events
    where (
       (pos==1 && evn.CarNumber.EndsWith(string)) ||
       (pos==2 && evn.CarNumber.StartsWith(string)) ||
       (pos==3 && evn.CarNumber.Contains(string))
    select new DataRecord
       {
       ...
       };
4

3 回答 3

5
var SQLquery =
       from event evn in database.events
       let carNum = evenloc.CarNumber
       where (pos==1&&carNum.EndsWith(string) ||
              pos==2&&carNum.StartsWith(string) ||
              pos==3&&carNum.Contains(string))
       select new DataRecord
      {
       ...
      };

注意:我认为您的查询中有一些错误,在这个evenloc?它看起来像一些外部查询变量?如果是这样,则condition可能总是 trueor false,并且where子句将变为where trueorwhere false并且您的查询将返回所有结果或不返回任何结果。

于 2013-09-13T09:48:02.497 回答
1

我建议使用这样的东西,因为它更清楚会发生什么。

int pos;
DbContext result = null;

switch(pos)
{
    case 1:
        result = database.events.Where(evenloc => evenloc.CarNumber.EndsWith(string));
        break;

    case 2:
        result = database.events.Where(evenloc => evenloc.CarNumber.StartsWith(string));
        break;

    case 3:
        result = database.events.Where(evenloc => evenloc.CarNumber.Contains(string));
        break;
}
于 2013-09-13T09:58:01.510 回答
0

请看下面的代码:

var str = "amitranjan246ranjan007%$%^246";
if(str.Contains("246"))
{
   return true;
}

在外行语言中,上面的代码将在字符串 str 中查找 246。并且它将返回 true,因为无论该字符串中的其他字符是什么,它都会在两个位置获得 246。

国王修改:

var SQLquery =
       from event evn in database.events
       let carNum = evenloc.CarNumber
       where (carNum.CarNumber.Contains(string))
       select new DataRecord
      {
       ...
      };
于 2013-09-13T09:56:58.117 回答