Проверьте строку в базе данных, чтобы увидеть, содержит ли она элемент в массиве - PullRequest
2 голосов
/ 30 января 2012

Каков наилучший способ сделать это?У меня есть этот код сейчас, но он не работает.

 if (db.tblOrganizations.Where(x => (
             new string[7] { "A1", "A2", "A3", "A4", "A5", "A6", "SG" }
         ).Contains(x.strAcronym.ToUpper().Trim()))
     .Select(x => x.guidOrgId)
     .Where(x => x == guidCustOffice)
     .Any())

на самом деле мне нужно проверить, содержит ли аббревиатура из базы данных какой-либо из строкового массива, таким образом, еслиA1O, то он все равно попадет в категорию из-за элемента A1 в строке [].

Ответы [ 2 ]

1 голос
/ 30 января 2012

В случае, если вы используете Sql Server 2008, вы можете изучить еще один вариант: Параметры таблицы значений

В следующем примере (адаптированный пример из Plamen Ratchev ) показано, как можно использовать табличные параметры в сервере Sql

Вы можете использовать следующее в базе данных:

-- User-defined table type
CREATE TYPE LookupCodeTable
AS TABLE (
 lookupcode varchar(10)
)
GO     

-- Procedure with table valued parameter
-- Must use the READONLY clause
CREATE PROCEDURE SelectLoansByCodes
  @lookupCodes LookupCodeTable READONLY
AS
  Select * from Loans 
  inner join @lookupCodes l on Loans.loancode like l.lookupcode + '%'

GO

Это пример использования с сервера sql

-- Sample usage from Sql Server
CREATE TABLE Loans (
 loan_nbr INT PRIMARY KEY,
 loancode varchar(50),
 loan_amount DECIMAL(15, 2));


-- Initialize the table variable with data
INSERT INTO Loans
VALUES (1, 'A120080101', 10000.00),
       (2, 'A120080203', 15000.00),
       (3, 'A220080315', 25000.00),
       (4, 'A120080101', 30000.00),
       (5, 'A320080203', 45000.00),
       (6, 'A520080315', 55000.00);

GO 


DECLARE @myLookupcodes LookupCodeTable;

-- Initialize the table variable with data
INSERT INTO @myLookupcodes
VALUES ('A1'), ('A2'), ('A5')

EXEC SelectLoansByCodes @lookupCodes = @myLookupCodes;

И пример использования из вашего приложения:

var loans = new DataTable();
loans.Columns.Add("lookupcode", typeof(string), 10);
using(SqlCommand cmd = new SqlCommand("SelectLoansByCodes", conn)
{
  cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.AddWithValue("Loans", loans);
      SqlDataReader reader =
        cmd.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}, {1}, {2}", reader[0], reader[1], reader[2]));
    }
}

и указатель на использование табличных параметров (с функциями) с платформой Entity:

http://blogs.msdn.com/b/efdesign/archive/2009/01/07/model-defined-functions.aspx

0 голосов
/ 30 января 2012

**

БАХ, не работает.Игнорировать.

**

Хорошо, вот мой ответ.То, что я делаю здесь, это определение количества символов для сравнения на основе акронима самого длинного размера в вашем списке акронимов.Итак, используя ваш пример, я проверяю первые два символа результата базы данных, потому что максимальный размер аббревиатуры составляет два символа.

var acronymList = new List<String> { "A1", "A2", "A3", "A4", "A5", "A6", "SG", };
var dbResult = "A10"; // get this from your database call.

var charsToCheck = acronymList.Max(x => x.Length);

if (charsToCheck > dbResult.Length)
     charsToCheck = dbResult.Length;

var trimmedDbResult = dbResult.Substring(0, charsToCheck);

var foundAcronym = acronymList.SingleOrDefault(acronym => acronym == trimmedDbResult);

if (foundAcronym != null)
{
     // use the found acronym
     Response.Write(foundAcronym); // prints "A1" in this example.
}

else
{
     // acronym not found, handle error
     Response.Write("error");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...