2010-07-23 5 views
6
public ActionResult ReadXMLDevices(int groupID) 
{    
    var query = from k in XMLEntities.unassigneditems 
    where k.DevOrAcc == true && k.Group == groupID 
    select k; 

    var view_query = from i in query 
        select new GetFreeDevices 
        { 
         MArticleNumber = i.ArticleNumber, 
         MFirmware = i.Firmware, 
         MGroup = i.Group, 
         MName = i.Name, 
         MSoftware = i.SoftwareVersion, 
         SA = GetNumberOfDevices(i.ArticleNumber,2), 
         STH = GetNumberOfDevices(i.ArticleNumber,3), 
         SASTH = GetNumberOfDevices(i.ArticleNumber,7) 
        }; 
    return PartialView(view_query); 
} 

public int GetNumberOfDevices(string artNo,int loc) 
{ 
    var num_dev = (from k in XMLEntities.deviceview 
        where k.Reserved == false && k.Sold == false && k.LocationNameId == loc && k.ArticleNumber == artNo 
        select k).Count(); 
    return num_dev; 
} 

오류 INT32 방법 '을 인식하지 않습니다LINQ는

LINQ to Entities does not recognize the method 'Int32 GetNumberOfDevices(System.String, Int32)' method, and this method cannot be translated into a store expression. How to resolve this???

답변

8

당신은 확인 목록은 GetNumberOfDevices() 메서드를 호출하기 전에 메모리 내인지 확인하기 위해 두 쿼리를 분할 할 수 있습니다. 결과를 List 또는이 경우 List<GetFreeDevices>으로 변환하여 메모리 내에서 쿼리를 만들 수 있습니다. 그런 식으로, LinQ to Entities는 XML과의 변환을 할 필요가 없으며 GetNumberOfDevices() 메소드를 사용할 수 있습니다.

var view_query = (from i in query 
    select new GetFreeDevices 
    { 
     MArticleNumber = i.ArticleNumber, 
     MFirmware = i.Firmware, 
     MGroup = i.Group, 
     MName = i.Name, 
     MSoftware = i.SoftwareVersion 

    }).ToList(); 
var result_query = from i in query 
    select new GetFreeDevices 
    { 
     MArticleNumber = i.MArticleNumber, 
     MFirmware = i.MFirmware, 
     MGroup = i.MGroup, 
     MName = i.MName, 
     MSoftware = i.MSoftware, 
     SA = GetNumberOfDevices(i.MArticleNumber,2), 
     STH = GetNumberOfDevices(i.MArticleNumber,3), 
     SASTH = GetNumberOfDevices(i.MArticleNumber,7) 
    }; 
return PartialView(result_query); 

마지막 문 목록 또는 대신 IQueryableIEnumerable을 허용하도록 PartialView 있어야한다는 사실을 명심해야합니다.

0

다른 쉬운 방법이 있습니다.

먼저, 데이터베이스에서 메모리로 데이터를로드 : 다음

// ... 
var query_view = from i in query 
       select i; 

query_view.Load(); 
// ... 

, 당신이 무엇을 LINQ - 투 - 객체가 아닌 L2E와 원하는가 :

var view_query_1 = from i in DbContext.myEntities.Local 
       select new GetFreeDevices 
       { 
        MArticleNumber = i.ArticleNumber, 
        MFirmware = i.Firmware, 
        MGroup = i.Group, 
        MName = i.Name, 
        MSoftware = i.SoftwareVersion, 
        SA = GetNumberOfDevices(i.ArticleNumber,2), // 
        STH = GetNumberOfDevices(i.ArticleNumber,3), // These are now ok! 
        SASTH = GetNumberOfDevices(i.ArticleNumber,7) // 
       }; 
    return PartialView(view_query_1.AsEnumerable()); 

당신은이 트릭을 사용할 수 있습니다 L2E가 지원하지 않는 방법.