2010-02-24 5 views
2

두 개의 서로 다른 정수 속성이있는 객체가 있고 Linq에서 Entities에 새로운 객체를 가져 오려고합니다. 연결된 객체와 동일한 객체의 두 정수 속성을 결합합니다. , 다음과 같이LINQ : 여러 int 속성을 문자열로 연결

년의 문자열 연결은 컴파일되지 않습니다. ,

var results = from o in objects 
       select string.Format("{0} - {1}", o.Number1, o.Number2); 

는 (단, 원래 작동합니다 :

+0

LINQ-to-SQL을 사용하고 있습니까? – SLaks

+0

코드가 제대로 작동해야합니다. 오류가 있습니까? – SLaks

+0

LINQ to SQL 또는 LINQ to Entities 중 하나를 사용한다고 가정하는 것이 안전합니까? context.dates와 context.Seasons를 알았습니다. 컨텍스트가 무엇인지는 모르겠지만 데이터베이스 컨텍스트이면 ... LINQ의 모든 기능을 사용할 수 없다는 것을 의미합니다. IQueryable 인터페이스의 전부는 아니지만 대부분을 포함합니다. – jrista

답변

2

을 쓸 수 있습니다 String.Format 호출은 실패 할 가능성이 높습니다. 공급자와 마찬가지로 select 절이 데이터베이스 내에서 실행됩니다. C#에서 SQL로 모든 것을 변환 할 수있는 것은 아닙니다.

var temp = (
    from d in context.dates 
    from s in context.Seasons 
    where s.SeasonID == d.DateID 
    select new { s.StartYear, s.EndYear } 
).ToList(); // Execute query against database now, before converting date parts to a string 

var temp2 = 
    from t in temp 
    select new DateRange 
    { 
    DateString = t.StartYear + " - " + t.EndYear 
    }; 

List<DateRange> collection = temp2.ToList(); 

편집

: 내가 추가 생각을했다 당신은 다음과 같은 일을해야 할 같은

는 문자열로 데이터베이스 결과를 변환합니다. String.Format 호출이 문제 일 가능성이 큽니다. 그것은 일반 제인 CONCAT 대해 어떻게 작동 여부 만한다면 나는 확실하지 않다 :

StringConvert 방법은 LINQ 문이 실행을 위해 SQL로 변환되어 적절한 변환 기능으로 변환됩니다
List<DateRange> collection = 
(from d in context.dates 
select new DateRange 
{ 
    DateString = from s in context.Seasons 
    where s.SeasonID = d.DateID 
    select s.StartYear + " - " + s.EndYear 
} 
).ToList<DateRange>(); 
+0

나는 이것을 시도하고 다시보고 할 것이다. –

+0

예, 작동합니다. ToList는 추측 한대로 결과 집합을 먼저 반환 한 다음 두 번째 개체를 사용하여 데이터베이스 외부에서 조작하는 데 필수적입니다. 나는 내 마음이 너만큼 조직적 이었으면 좋겠다. –

+0

하! 잘, 나는 그것이 그렇게 조직되었는지 모른다. ; P 나는 과거에 EF v1.0으로 지옥으로 빠져 나갔고 거의 모든 문제를 겪었습니다. 이것은 상당히 일반적인 것이 었습니다. 옵션이있는 경우 EF v1 또는 L2S보다 더 우수한 ORM이기 때문에 최대한 빨리 EV v4.0 (및 .NET 4.0)으로 이동하는 것이 좋습니다.또한 많은 변형과 사용자 정의 db 함수 매핑을 지원하므로 String.Format (또는 사용자 정의 유사 구현)이 실제로 작동 할 수 있습니다. – jrista

3
이 객체에 LINQ에서 작동합니다

는 객체에있는 각 개체는 "번호 1"과 "번호 2"필드 또는 속성을 포함하는 클래스 또는 구조체 것이어야한다 뿐만 아니라 ....)

+0

이것은 훌륭한 제안입니다. 나는 엔티티에 Linq를 사용하고있다. 나는 나의 상황이 내가 설명했던 것보다 더 복잡하다고 생각한다. 여기에 기본적으로 설치가 있습니다 : 리스트 콜렉션 = (context.dates에서 새 ddRange를 선택하십시오 (DateRange = from context.Seasons에서 s.SeasonID = d.DateID select string.Format ("{0} - {1 } ", s.StartYear, s.EndYear)}). ToList (); 문자열 연결은 여기서 컴파일되지 않습니다. –

2

작성한 것을 원한다면 원본 코드가 작동합니다. 당신이 정말로에서 얻을하려는 경우,

var objects = new MyObject[]{ 
    new MyObject {Int1 = 1, Int2 = 2}, 
    new MyObject {Int1 = 3, Int2 = 4}}; 

뭔가 하나처럼 - 2 - 3-4 당신은, 당신은 SQL/엔티티에 LINQ를 통해 데이터베이스에 연결하는 가정

var strings = objects.Select(o = > string.Format("{0} - {1}", o.Int1, o.Int2).ToArray(); 
var output = string.Join(" - ", strings); 
1
using System.Data.Objects.SqlClient; 
    : 
    : 
    List<DateRange> collection = (from d in context.dates 
    select new DateRange 
    { 
     DateString = from s in context.Seasons 
     where s.SeasonID = d.DateID 
     select SqlFunctions.StringConvert((double)s.StartYear) + " - " + 
      SqlFunctions.StringConvert((double)s.EndYear) 
    }).ToList<DateRange>(); 

서버에.