info2santram Ответов: 2

Как оператор в LINQ в C#


Я хочу преобразовать следующий SQL-запрос в linq или iqueryable:

название строки = " моторные насосы";

"SELECT c.ID as ID,
                                                                                         c.Description as Description, 
                                                                                         m.MfgName as MfgName
                                                                                           FROM swCompanyEqpt c left join swMfg m on c.swMfgKey = m.ID
                                                                                           WHERE ((c.FleetEqptName LIKE '%" + title.Replace(" ", "%' OR c.FleetEqptName LIKE '%") + "%')" +
                                                                            "OR (m.MfgName LIKE '%" + title.Replace(" ", "%' OR m.MfgName LIKE '%") + "%')"  +
                                                                            "order by c.FleetEqptName"


Рассмотрим следующее для написания приведенного выше запроса:

var lstSwCompanyEqptDto = из swCompanyEqpt в dbContext.Set< swcompanyeqpt>()

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

Я попытался преобразовать оператор like в SQL в LINQ для поиска нескольких слов

F-ES Sitecore

google "linq like", и вы найдете много предложений, пожалуйста, сделайте фундаментальное исследование, прежде чем задавать вопрос.

info2santram

будете ли вы пожалуйста ответить на мой вопрос. вы поняли мой вопрос?

Karthik_Mahalingam

"содержит" - это аналог оператора "как" в C#

info2santram

Привет я знаю это см. Мой комментарий ниже

info2santram

я хочу найти любую комбинацию из заданной строки. Например: "контрольный насос"

1 контроль
2 насоса
3 управление насосом
4 управление насосом

Karthik_Mahalingam

разделите строку и выполните поиск по коллекции

2 Ответов

Рейтинг:
2

Maciej Los

Основанный на Картик Бангалор[^] пример кода, я бы использовал запрос linq следующим образом:

string key = "control pump";
string[] keys = key.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
//filter data
var result = lst.Where(e=>keys.Any(k=>e.MyProperty.Contains(k)))
                .ToList();


Для получения более подробной информации, пожалуйста, смотрите:
Перечислимый.Содержит(Способ, Метод) (Интерфейс IEnumerable(Метод), Метод) (Система.В LINQ)[^]
Перечислимый.Любой Метод (TSource) (IEnumerable (TSource)) (Системы.В LINQ)[^]
Перечислимый.Где(TSource) Для (Интерфейс IEnumerable(Метод), Функция(Метод Логических)) (Системы.В LINQ)[^]


Karthik_Mahalingam

простой и усилитель; хороший
5!

Maciej Los

Спасибо, Картик.

Рейтинг:
13

Karthik_Mahalingam

Цитата:
я хочу найти любую комбинацию из заданной строки. Например: "контрольный насос"

1 контроль
2 насоса
3 управление насосом
4 управление насосом



см. этот пример

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    static void Main()
    {
        List<Entity> lst = new List<Entity>();
        lst.Add(new Entity() { MyProperty = "control item" });
        lst.Add(new Entity() { MyProperty = "pump item" });
        lst.Add(new Entity() { MyProperty = "control pump" });
        lst.Add(new Entity() { MyProperty = "item " });
        string key = "control pump";
        Func<Entity, bool> like = k =>
        {
            var temp = key.Split(' ').ToList();
            temp.Add(key);
            foreach (var item in temp)
                if (k.MyProperty.Contains(item))
                    return true;
            return false;
        };
        var result = lst.Where(like).ToList();
    }
}
public class Entity
{
    public string MyProperty { get; set; }

}


Maciej Los

5ед!

Karthik_Mahalingam

Спасибо Мацей

Wendelius

Хороший пример, 5

Karthik_Mahalingam

Спасибо Мика