Сгруппировать первый символ в строке по любому из символов в другой строке - PullRequest
0 голосов
/ 21 сентября 2011

В Linq2Sql с заданным списком строк мне нужен запрос, который возвращает все строки системы, которая начинается с любого из символов в строке.

Вот что я придумал: (Нужна помощь с этой функцией)

void Main()
{
    var strings = new List<string>(){"ABCDE", "FGHIJ", "KLMNO"};
    var values = GetUsedStrings(strings);
    /*
     * In my case expected to return strings "ABCDE" and "KLMNO" 
     * since there exists Systems that starts
     * with any of the characters in those strings.
     */
    values.Dump();
}

public IList<string> GetUsedStrings(IList<string> strings)
{
    var q = from s in tblSystems
            where s.systemName != null && s.systemName.Length > 0
            group s by s.systemName[0] into g //Somehow need to group by the characters strings list?
            select g.Key;

    return q.ToList();
}

Проверка одной строки: (работает как положено)

private bool StartsWithAny(string characters)
{
    return
        (from s in tblSystems
        where 
          s.systemName != null && s.systemName.Length > 0 &&
          characters.Contains(s.systemName[0])
        select s).Any();
}

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011

Попробуйте что-то вроде этого:

    private bool StartsWithAny(string characters)
    {
         string aa = @"if exists(select * from tblSystems where  
                    systemName is not null and LEN(systemName)>0";

         for (int i = 0; i < characters.Length; i++)
         {
             aa += " and SUBSTRING([login],1,1) = '" + characters[i] + "'";
         }
         aa+=")";
         return db.ExecuteQuery<bool>(aa).Single();
    }
0 голосов
/ 21 сентября 2011

Решит ли это вашу проблему, если вы построите новую строку из списка, которую вы получите, но это не даст вам группы, которые верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...