-2

私はlinqを使ってコードを書いています

var result=from m in driver_list select(m.Email,m.LisancePlate)

私のコード出力はこのようなものです

sample1@company.com;sample2@company.com----34 KZ 7898 sample3@company.com;sample2@company.com---- 34 TZK 6785

この sample1@company.com---34 KZ 7898 sample2@company.com---34 KZ 7898 sample3@company.com---34 TZK 6785 sample2@company.com- のような結果を使用して、新しい出力が必要です。 --34 TZK 6785

4

4 に答える 4

0
var src_in_arac = from log in Src_Log_List.ToList()
                              join ml in mail_arac_sorgu on log.Node equals ml.TasitTanımaNo
                              join sr in surucu_list.Select(ss =>
                              {
                                  string SCKartNo = "";
                                  string AdSoyad = ss.AdSoyad;

                                  if (ss.SrcKardId != "")
                                      SCKartNo = "000" + (Convert.ToInt64(ss.SrcKardId).ToString("X"));
                                  return new { AdSoyad, SCKartNo };

                              })
                              on log.SCID equals sr.SCKartNo
                              into data
                              from ss in data.DefaultIfEmpty()
                              where log.Task == "GPSEvents"


                              select new { log.Speed, AdSoyad = (ss == null ? "İZİNSİZ KULLANIM" : ss.AdSoyad), ml.Plaka, log.OdoMeter, log.StandStill, log.Date, ml.Grup, ml.Email ,log.SC};

私のコードは上記です。私の悪い英語で申し訳ありません。Mail Fields は ml.Email 、';' で結合されたメールを分割したい チャクター。次に、さまよう文字列に。

于 2013-10-06T17:22:54.047 に答える
0

指定された出力から、次のようなリストがあることを確認します。

List<string> test = new List<string>()
{
    "sample1@company.com;sample2@company.com----34 KZ 7898",
    "sample3@company.com;sample2@company.com---- 34 TZK 6785"
};

以下は、要求された出力を生成します。

var result = 
test
.Select 
(
    t =>new 
    {
        Emails =  t.Split(new string[] { "----" }, StringSplitOptions.None)[0],
        LicensePlate = t.Split(new string[] { "----" }, StringSplitOptions.None)[1]
    }
)
.Select 
(  
    t => new
    {
        Email = t.Emails.Split(';'),
        t.LicensePlate}
    )
.SelectMany 
( 
    t => t.Email,
    (x,t)=>new {Email = t,CarPlaket = x.LicensePlate)
)
.ToList();

foreach(var email in result)
    Console.WriteLine("{0}---{1}",email.Email,email.CarPlaket;)

上記の解決策は結果を同じリストに入れませんが、新しいリストを作成します。

于 2013-10-05T08:17:46.817 に答える
0

.Net の正規表現エンジンは、ルックアラウンドでのグループ キャプチャをサポートしているため、簡単になります。

string input="sample1@company.com;sample2@company.com----34 KZ 7898 sample3@company.com;sample2@company.com---- 34 TZK 6785";
String[] emailValues=Regex.Matches(input,@"(\w+@\w+[.]\w+)(?=.*?(-+.*?)(?=\s*\w+@|$))")
                          .Cast<Match>()
                          .Select(x=>x.Groups[1].Value+x.Groups[2].Value)
                          .ToArray();

これは、任意の数の電子メール ID で機能します

于 2013-10-05T08:31:19.620 に答える
0

Regexに複数あるため、使用する必要があるようspacesです34 KZ 7898。私はこのコードを試しましたが、期待どおりに動作します:

string input = "sample1@company.com;sample2@company.com----34 KZ 7898 sample3@company.com;sample2@company.com---- 34 TZK 6785";
var result = string.Join(" ", Regex.Split(input, "\\s(?=\\S+@)")
                             .Select(x=>{
                                var s = x.Split(new string[] {"----"}, StringSplitOptions.RemoveEmptyEntries);
                                return string.Join(" ",s[0].Split(';').Select(e => e + "----" + s[s.Length - 1]).ToArray());
                             }).ToArray());//No need ToArray() since .NET 4.0
//Output
sample1@company.com---34 KZ 7898 sample2@company.com---34 KZ 7898 sample3@company.com---34 TZK 6785 sample2@company.com---34 TZK 6785
于 2013-10-05T08:23:20.000 に答える