PDA

View Full Version : سوال: نوشتن متدی که جمع چند رشته را داخل linq انجام دهد؟



karimi.ali2005
یک شنبه 25 فروردین 1392, 22:04 عصر
آیا این امکان وجود دارد تابع یا extension method نوشت که جمع چند رشته را به دست آورد شبیه sum خود دستورات linq با این تفاوت که رشته ها را به هم الحاق کند
من یک نمونه کد دارم مشکلی که داره فقط روی لیست های جواب می دهد زمانی که به دیتابیس وصل میشی خطا میده
استفاده از لیست وبدون خطا

List<myclass> obj = new List<myclass>()
{
new myclass(){ID=1,name="ali",number=1},
new myclass(){ID=1,name="karimi",number=2},
new myclass(){ID=2,name="mohammad",number=4},
new myclass(){ID=2,name="sarbandi",number=5},

};
var query = (from p in obj
group p by p.ID into g

select new { id = g.Key, sum = g.SumString2(p => p.name, " ") }).ToList();

dataGridView1.DataSource = query;



extension method

public static class EnumerableOfString
{
public static string SumString2<TSource>(this IEnumerable<TSource> source, Func<TSource, string> selector, string separator = null)
{


return String.Join(separator ?? string.Empty, source.Select(i => selector(i)));
}
}

ولی زمانی که از کد زیر استفاده می کنم در زمان اجرا خطا میده

testtelContext db = new testtelContext();
var query2 = (from p in db.T5
group p by p.ID into g

select new { id = g.Key, sum = g.SumString2(p => p.name, " ") }).ToList();

خطایی که در زمان اجرا می دهد
102844
آیا تابعی میشه برای این کار نوشت وتابعی وجود دارد؟
با تشکر

tooraj_azizi_1035
دوشنبه 26 فروردین 1392, 20:08 عصر
اگر اصراری به نوشتن Extension Methods ندارید از متدهای آماده استفاده کنید:


string[] words = { "one", "two", "three" };
var res = words.Aggregate((current, next) => current + ", " + next);
Console.WriteLine(res);

This outputs:

one, two, three


Aggregate یک متد تجمعی محسوب می شود و current و next دو ورودی آن هستند خروجی عبارت لاندا در current قرار گرفته و next آیتم سوم می شود و دوباره این تابع تا زمانی که دیگر next ای در کار نباشد ادامه پیدا می کند.

karimi.ali2005
چهارشنبه 28 فروردین 1392, 07:12 صبح
اگر اصراری به نوشتن Extension Methods ندارید از متدهای آماده استفاده کنید:


string[] words = { "one", "two", "three" };
var res = words.Aggregate((current, next) => current + ", " + next);
Console.WriteLine(res);

This outputs:

one, two, three


Aggregate یک متد تجمعی محسوب می شود و current و next دو ورودی آن هستند خروجی عبارت لاندا در current قرار گرفته و next آیتم سوم می شود و دوباره این تابع تا زمانی که دیگر next ای در کار نباشد ادامه پیدا می کند.
ممنون
همه این کد ها برای لیست جواب میده اگه خواسته باشیم برای کد زیر از Aggregate استفاده کنیم چگونه است

testtelContext db = new testtelContext();
var query2 = (from p in db.T5
group p by p.ID into g

select new { id = g.Key, sum = g.SumString2(p => p.name, " ") }).ToList();