2016-04-15 7 views
0

私はかなり新しいMVC4です。複雑なモデルを扱っています:IListのプロパティと、プリミティブ型(文字列とint)のプロパティを含むモデルです。 IListのプロパティはストアドプロシージャを使用する必要があり、プリミティブ型は通常のリンククエリを使用します。ここではモデルのコードは次のとおりです。ここでストアドプロシージャを使用した複雑なLinq式

public class EditUserModel 
{ 
    public IList<UserTranscript> UserTranscripts { get; set; } 

    public int? PersonID { get; set; } 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string StateCode { get; set; } 
    public string PostalCode { get; set; } 
    public string Phone { get; set; } 
    public string Email { get; set; } 
} 

はUserTranscriptクラスのコードは次のとおりです。ここで

public class UserTranscript 
{   
    public decimal Score { get; set; }   
    public DateTime CompletionDate { get; set; } 
    public string Status { get; set; } 
} 

は私の方法である:

public EditUserModel GetUserRecord(int personid) 
    { 
     //using (var db = new TceoModel.TceoContext()) 
     //{ 

      MyContext db = new MyContext(); 

      var user = (from p in db.People 
         from pu in db.PersonUsernames.Where(f => f.PersonID == p.UPID).DefaultIfEmpty() 
         from pe in db.PersonEmails.Where(a => a.PersonID == p.UPID).DefaultIfEmpty() 
         from pa in db.Addresses.Where(c => c.PersonID == p.UPID).DefaultIfEmpty()        
         from lnr in db.Activities.Where(y => y.ActivityID == un.ActivityID).DefaultIfEmpty() 
         from tr in db.uspTranscripts(personid) 
         where p.UPID == personid 

         select new EditUserModel 
         { 
          PersonID = p.UPID, 
          UserName = pu.Username, 
          Email = pe.Email, 
          FirstName = p.FirstName, 
          MiddleName = p.MiddleName, 
          LastName = p.LastName, 
          Address = pa.Address1, 
          City = pa.City, 
          StateCode = sc.StateAbbr, 
          PostalCode = pa.Zip, 
          Phone = pp.PhoneNumber 

         }).AsEnumerable().Select(s => new UserTranscript() { 

          **How to return a list of UserTranscripts using the stored procedure db.uspTranscripts(personid)** 

         }); 

私の質問はどのように私ができる、ですdb.uspTranscripts(personid)ストアドプロシージャを使用して、2番目のクエリで転写物のユーザーリストを返しますか?

ありがとうございました。

+0

ありがとうございました。まだEF6には入っていません。私はEF 4を使用しています。 –

答えて

-2

まず、以下のリンクを使用してみてください。

https://www.linqpad.net

それは私をたくさん助けました。

第二に、私はそのリストが

new EditUserModel() { UserTranscripts = tr } 
+1

linqpadの広告は質問とは関係がなく、不要です。私はここでストアドプロシージャを呼び出すことに関連するものは何も見ていません。 – Rob

0

の内側に滞在していると思い、私はEFのストアドプロシージャとは専門家だが、私はこれを行うには2つの方法を見てきました。

  • 例えば、https://msdn.microsoft.com/en-us/library/bb399357(v=vs.110).aspxを見てください。彼らはあなたが

    // Usage 
    .AsEnumerable().Select(s => db.uspTranscripts(s)); 
    
    // Stored Procedure 
    [Function(Name="dbo.CustOrderTotal")] //probably dbo.uspTranscripts in your case 
    [return: Parameter(DbType="Int")] 
    public int CustOrderTotal([Parameter(Name="CustomerID", DbType="NChar(5)")] string customerID, [Parameter(Name="TotalSales", DbType="Money")] ref System.Nullable<decimal> totalSales) 
    { 
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), customerID, totalSales); 
        totalSales = ((System.Nullable<decimal>)(result.GetParameterValue(1))); 
        return ((int)(result.ReturnValue)); 
    } 
    
  • それとも、この男のあなたが実際に届くの答えとグラブのコードの最後の行のようにそれを行うことができるかもしれないようにそれを使用できるように、関数として記述され、その一例ストアドプロシージャを持っていますストアドプロシージャを使用すると、C#でのストアドプロシージャを書き換えることを喜んでいる場合、https://stackoverflow.com/a/20973919/4875338

最初はそれを行うための最善の方法であるように思わ使用します。がんばろう!

関連する問題