2016-07-05 1 views
1

LINQクエリは、DateTimeをMilijからhejriに変換するためのC#メソッドを使用するグループバイステートメントを使用しています。 今、私の目的はです:生のSQLにこのLINQクエリを書く"Group by query"でlinqを使用しないでC#メソッドを呼び出す方法

これは私のNewsModelクラスです:

public class News 
{ 
    public News() 
    { 
     Months = new List<string>(); 
    }   
    public int NewsID { get; set; } 
    [Required]   
    public string FaTitle { get; set; }   
    public string FaBody { get; set; }   
    public string EnTitle { get; set; }   
    public string EnBody { get; set; }   
    public bool IsImageActive { get; set; }   
    public string NewsImage { get; set; }   
    public string NewsImage2 { get; set; }   
    public bool IsArchived { get; set; }   
    public bool IsDeleted { get; set; } 
    public byte[] RowVersion { get; set; } 
    [DataType(DataType.DateTime)]   
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}", ApplyFormatInEditMode = true)] 
    public DateTime DateUpdate { get; set; } 
    [DataType(DataType.DateTime)]   
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}", ApplyFormatInEditMode = true)] 
    public DateTime DateCreate { get; set; } 
    public int CategoryID { get; set; } 
    [ForeignKey("CategoryID")] 
    public virtual Category Category { get; set; } 
    [NotMapped] 
    public int Years { get; set; } 
    [NotMapped] 
    public List<String> Months { get; set; } 
} 
} 

、私のコントローラで:

var Archives = from Records in news 
    group Records by new { Years = date.GetYear(Records.DateUpdate, ConvertTime.UTCtoIran) } into GYears 
    select new { Years = GYears.Key.Years, Months = (from r in GYears group r by date.GetMonthName(r.DateUpdate) into Gmonths select Gmonths.Key) }.ToExpando(); 

ViewBag.Archive = Archives; 

は今、私がやりたいですLINQクエリで参照しているように生のSQLクエリでは、私はdate.GetYeardate.GetMonthNameのC#メソッドであるメソッドを使用しましたが、のような生のSQLクエリでは使用できません

+0

年は、そのフィールドでありますクエリーが返されました 'select foo as Years' – Saeid

+0

Aは' db.news.SqlQuery( "Year(foo)from news"); 'の結果です。 、私は自分自身の関数をCで使用したい# – Saeid

+0

@LukStorms Aのインデックスは整数ではありません。 – Saeid

答えて

2

ご意見をもとに、あなたは地元の機能を必要としないこれを行うには、テーブルのレコード内の対応する月のリストで年を取得したい:

string query = "select DISTINCT DATEPART(YEAR, dbo.News.DateUpdate) as Year, " 
      + "DATEPART(YEAR, dbo.News.DateUpdate) as Month" 
      + "from dbo.News"; 

List<DataHolder> A = db.News.SqlQuery(query).ToList(); 

var results = (from a in A 
       group a by a.Year into grp 
       select new 
       { 
        Year = grp.Key, 
        Months = grp.Select(x => x.Month).ToList() 
       }).ToList(); 
+0

私は答えのために第2の解決策tyが欲しいですが、問題はあなたの2番目の解決策にはありません。 VSは年を知らない – Saeid

+0

@Saeidあなたは 'News'クラスで' Years'を持っていないのですか? – user3185569

+0

いいえ、私はそれを持っていない、それはちょうどSQLクエリの結果 "選択foo年として" – Saeid

関連する問題