avelsamy Ответов: 3

Как получить строку на основе значения, разделенного запятыми, с помощью LINQ


Всем привет,


СНО    идентификатор пользователя
---    -----------
1       S191, S192,S193,S195
2       S291, S192,S193, SSS
3       S291, S292,S393,S395


У меня есть разделенные запятыми данные в моем столбце col1, и у меня есть одна строка usong LINQ

мой вклад таков Строка str_user_id=S193

Требуемая выходная мощность : Я хочу, чтобы эта строка соответствовала любому User_id в столбце User_ID

любить

1    S191, S192,S193,S195
2 S291, S192,S193, SSS

этот
заранее спасибо

Что я уже пробовал:

Я пробовал это сделать, но не получил правильного результата

string prefixMatch = SearchDistCode + ",";
string suffixMatch = ", " + SearchDistCode;
строка innerMatch = "," + SearchDistCode + ",";

ВАР dist_code = (с р в ванной.temp_rate_target_schemes_new
где (Р.Distributor_Code.StartsWith(prefixMatch) | | r.Distributor_Code.Содержит (innerMatch) | | r.Distributor_Code.EndsWith(suffixMatch) | | (! r.Distributor_Code.Содержит(",") &&усилителя; Р.Distributor_Code == SearchDistCode))
выберите новый
{
ratebrokcode = r. Rate_Structure_ID
}).Список();

3 Ответов

Рейтинг:
2

OriginalGriff

- Серьезно? Не храните его так. Храните каждый идентификатор пользователя отдельно - хранение их в виде CSV-данных просто усложняет вашу жизнь - и это тот самый тривиальный бит, который вызывает у вас проблему! Подождите, пока вы не доберетесь до удаления пользователя...

Но... вы можете "Бодж", чтобы заставить это работать:

Dictionary<int, string> data = new Dictionary<int, string>();
data.Add(1, "S191,S192,S193,S195");
data.Add(2, "S291,S192,S193,SSS");
data.Add(3, "S291,S292,S393,S395");
var matches = data.Where(d => d.Value.Split(',').Contains("S193"));


Maciej Los

Вам даже не нужно использовать Split() функция.
Where(d=>d.Contains(idToFind)); - должно хватить!
Смотрите мой ответ ;)

OriginalGriff

Единственная причина, по которой я бы использовал split, - это то, что S193 не совпадает с ними:
"S291, S1934, S2345"
"S291, AS193, S295"

Maciej Los

Хорошая мысль!
Овации,
Мацей

OriginalGriff

Я уже бывал там раньше, друг мой! :смеяться:

vermavivek

пожалуйста, дайте мне знать, как проверить s191, s193 содержит

Рейтинг:
18

Maciej Los

Если вы хотите использовать Linq, вы можете достичь этого несколькими способами:


  1. с помощью Where + Any - немного сложно
    DataTable dt = new DataTable();
    dt.Columns.Add("Sno", typeof(int));
    dt.Columns.Add("User_ID", typeof(string));
    dt.Rows.Add(new object[]{1, "S191,S192,S193,S195"});
    dt.Rows.Add(new object[]{2, "S291,S192,S193,SSS"});
    dt.Rows.Add(new object[]{3, "S291,S292,S393,S395"});
    
    string suserid="S193";
    
    var result = dt.AsEnumerable()
    		.Where(x=>x.Field<string>("User_ID").Split(new string[]{","}, StringSplitOptions.RemoveEmptyEntries).Any(y=>y==suserid))
    		.Select(x=>x)
    		.ToList();
    		
    //returns:
    //1    |    S191,S192,S193,S195
    //2    |    S291,S192,S193,SSS


  2. с помощью Contains() - простой способ
    Видеть Решение 1[^] предоставлено OriginalGriff[^]
    Но, пожалуйста, прочтите мой комментарий к этому ответу.
    .Where(x=>x.Field<string>("User_ID").Contains(idToFind))


avelsamy

его работа.... спасибо Мацей

Maciej Los

Всегда пожалуйста.

Рейтинг:
0

Maciej Los

Даже если ОП хочет найти решение Linq, этого достаточно!