2014-02-06 3 views
-1

기본적으로 %와 같은 sql 용 LINQ 문을 사용하고 싶습니다. 나는 적절하다고 생각했지만 올바른 결과를 얻지 못했습니다. 목록은 확실히 숫자 3330과 항목이지만, 반환 된 결과가 비어있는 내 모델 내부Linq에 SQL 용 Like %

private List<Model> getSearchResults(List<Model> models) 
{ 
    List<Model> result = models.Where(m => m.Number.Contains("3330")).ToList(); 

    return result; 
} 

: 내 기능 내부

public class Model { 
    public string Number { get; set; } 
} 

:

나는 모델이있다. :( 이것은 또한 .Contains ("333")와 함께 작동합니다. 그러나 그것은하지 않습니다.

+9

에이 예제와 함께 재생할 수 있습니다. 우리는 당신을 돕기 위해 관련된 유형에 대해 충분히 알지 못합니다. 'Contains' 메쏘드는 확실히 작동합니다 * 그래서 문제는 당신이 그것을 어떻게 사용하고있을 가능성이 높습니다. 'l.Number'가 단지 문자열 일 경우, LINQ'Contains' 메서드가 아니라'String.Contains' 메서드를 사용하고 있음을 유의하십시오. –

+0

목록은 유형 목록에 있으며 내용이 가득 찼습니다 내 데이터베이스. 숫자는 문자열입니다. – mosquito87

+0

그건 정말 도움이되지 않습니다. (부분적으로는 귀하의 의견에 제네릭 유형이 포함되어있을 수 있지만 따옴표로 백틱을 사용하지 않아서 우리가 볼 수있는 것에서 유형을 잃어 버리기 때문입니다.) 게시물을 짧지 만 완전한 예로 편집하십시오. –

답변

2

을 당신이 실제로 LINQ - 투 - SQL 공급자를 사용하고 생각한다. 을 그런 경우에, 당신이해야 SqlMethods.Like 대신 String.Contains를 사용

list.Where(l => SqlMethods.Like(l.Number, "%12%")).ToList(); 
+0

나는 linq-to-sql 공급자를 사용하지 않는다. 죄송합니다. – mosquito87

+0

-1 무엇이 당신을 의심합니까?L2S에 대한 언급이 전혀 없으며 OP는 'Contains'를 사용하여 예외를 언급하지도 않습니다 (L2S가 나에게 던 졌음). 이것은 짐작입니다. – James

+1

@James 교양있는 추측. OP는 목록에 데이터베이스에서 검색 한 데이터가 주석에 포함되어 있다고 언급했습니다. 그리고 L2S는'String.Contains'을 지원하지 않기 때문에이 경우처럼 보입니다. 제 의견으로는 공정한 가정이었습니다. Tbh, 나는 예외가 던져 지는지 전혀 몰랐다. – dcastro

0

이 문은 SQL 연산자 'IN'처럼 사용할 수 있어야 포함합니다 자세한 내용은 링크를 참조하십시오. 난 당신이 내가 생각

tip-8-writing-where-in-style-queries-using-linq-to-entities

을 ooking이 같은 뭔가 :

how-to-do-sql-like-in-linq

당신은 다음과 같이 사용한다 :

List<Model> result = models.Where(m => m.Number.Contains("/3330/")).ToList(); 

또한 .StartsWith() 또는 .EndsWith()를 사용할 수

+0

두 번째 링크에서 제공되는 것과 똑같은 일을하고 있습니다. 맞습니까? – mosquito87

+0

@ mosquito87 업데이트 된 답변보기 – Saket

+0

노력해 주셔서 감사합니다. 그러나 이것은 확실히 작동하지 않습니다! 게시 한 솔루션은 "/ 3330 /"으로 항목을 찾는 것이지만 "3330"을 찾고 있습니다. 원저자는 "/ 12 /"을 사용해야했습니다. 그는 한 달을 찾고있었습니다. – mosquito87

0

이 좋아, 여기 내 문제의 코드 샘플을 발행하고 예, Contains 메서드는 확실히 작동합니다.

using System; 
using System.Linq; 
using System.Collections.Generic; 

public class Program 
{ 
    public class Model { 
     public string Number { get; set; } 
    } 

    private static List<Model> getSearchResults(List<Model> models) 
    { 
     List<Model> result = models.Where(m => m.Number.Contains("3330")).ToList(); 

     return result; 
    } 

    public static void Main() 
    { 
     List<Model> list = new List<Model>() { 
      new Model() { Number = "13330A"}, 
      new Model() { Number = "13230A"}, 
      new Model() { Number = "3330A"}, 
      new Model() { Number = "543330"}, 
      new Model() { Number = "48913"}, 
      new Model() { Number = "97798133"}, 
      new Model() { Number = "542130"} 
     }; 

     foreach(Model v in getSearchResults(list)) { 
      Console.WriteLine(v.Number); 
     }  
    } 
} 

출력은 다음과 같습니다

13330A 
3330A 
543330 

코드를 확인하여 문제를 보여주는 짧지 만 완전한 프로그램을 제시해주십시오 http://dotnetfiddle.net/143UgC