ساخت group by داینامیک با linq
با سلام
من میخوام یه گروپ بای داینامیک داشته باشم که فیلد هایی که می خوان گروپ بای بشه رو با استفاده از ارایه ای از رشته ها بدم....بعد انتخاب فیلد هایی که می خوام بکنم با استفاده از استرینگ باشه....نمونه کد باشه بهتره و کار بکنه...
var param = new string[1] {"Fname"};
item.GroupBy(param).select(param, "count(lname),sum(amount)");
نقل قول: ساخت گروپ بای داینامیک با linq
دوستان کسی میتونه اینو تبدیل به یک expression بکنه
value(System.Data.Entity.Core.Objects.ObjectQuery` 1[test_groupby.Customer]).
MergeAs(AppendOnly).GroupBy(t => new <>f__AnonymousType0`2
(Fname = t.Fname, Lname = t.Lname),
(key, group) =>
new <>f__AnonymousType1`3(Key = key.Fname, Count = group.Count(x => x.Active), Sum = group.Sum(t => Convert(t.IntroducerType))))
نقل قول: ساخت گروپ بای داینامیک با linq
نقل قول:
نوشته شده توسط
sempay_ninjutsu
با سلام
من میخوام یه گروپ بای داینامیک داشته باشم که فیلد هایی که می خوان گروپ بای بشه رو با استفاده از ارایه ای از رشته ها بدم....بعد انتخاب فیلد هایی که می خوام بکنم با استفاده از استرینگ باشه....نمونه کد باشه بهتره و کار بکنه...
var param = new string[1] {"Fname"};
item.GroupBy(param).select(param, "count(lname),sum(amount)");
سلام
اگه LinQ رو خوب یاد بگیری، کار سادهای هست.
شما باید IQueryable درست کنی، و بسته به نیازت اون رو گسترش بدی. اما تو LinQ باید String رو فراموش کنی.
اصولاً LinQ اومده که از string استفاده نکنی.
من خودم بدون استفاده از string همه جور Query پویا میگیرم تو برنامههام.
یه مثال:
var queryable = entities.Customers.Where( x=> x.Name == "MyCustomerName" );
if ( condition1 )
queryable = queryable.GroupJoin( entities.Invoices, p=>p.Id, i=>i.CustomerId,
( p, i ) => new { Person = p, InvoiceCount = i.Count(), TotalPurchase = i.Sum( x=> x.Amount ) );
با کمی خلاقیت همه جور Query میتونی تو LinQ بگیری.
صبا صبوحی
نقل قول: ساخت گروپ بای داینامیک با linq
نقل قول:
نوشته شده توسط
SabaSabouhi
سلام
اگه LinQ رو خوب یاد بگیری، کار سادهای هست.
شما باید IQueryable درست کنی، و بسته به نیازت اون رو گسترش بدی. اما تو LinQ باید String رو فراموش کنی.
اصولاً LinQ اومده که از string استفاده نکنی.
من خودم بدون استفاده از string همه جور Query پویا میگیرم تو برنامههام.
یه مثال:
var queryable = entities.Customers.Where( x=> x.Name == "MyCustomerName" );
if ( condition1 )
queryable = queryable.GroupJoin( entities.Invoices, p=>p.Id, i=>i.CustomerId,
( p, i ) => new { Person = p, InvoiceCount = i.Count(), TotalPurchase = i.Sum( x=> x.Amount ) );
با کمی خلاقیت همه جور Query میتونی تو LinQ بگیری.
صبا صبوحی
از پاسختون سپاسگذارم..ولی اگه دقت کرده باشین من گفتم میخوام با استرینگ بسازم.....چون تمام ابجکت های من بصورت داینامیک هستن و بنا به نیازی میخواستم استرینگ کار کنم چه تو سلکت گروپ بای و چه تو انتخاب فیلدهایی برای جمع و ... قابل توجه شما بگم اون ابجکت آخری که شما بصورت بی نام تعریف کردین و خروجیو داخل اون ریختین هم بصورت داینامیک می باشد....
اگه لطف کنی خلاقیت به خرج بدی اینو بنویسی ممنون میشم...
نقل قول: ساخت group by داینامیک با linq
از آخرین ورژن system.linq.dynamic و بصورت زیر از آن استفاده کنید.
string[] fields = { "FName", "LName" };
string aggrigatefield = "new(Sum(َAmount) as Value1,Key as Key)";
string field = string.Format("new({0})", string.Join(",", fields));
// string select = string.Format("new({0})", string.Join(",", aggrigatefield));
var res = context.Personeli.ToList().GroupBy(field, "it")
.Select(aggrigatefield).Cast<object>().ToList();