Click here to Skip to main content
15,892,809 members
Please Sign up or sign in to vote.
3.00/5 (1 vote)
See more:
Dear

Sir/Madam,

I am facing in my project one problem, i.e., i am getting check box list values in a string like 1,2,3,4.... and am inserting these values in Insert button. When coming to update, am getting these values from the database and binding the check box list. Here am going to insert different values like 2,3,4,5..... So am comparing these two string in code like 2,3,4 values already exists so i want only one value i.e., 5. Please anybody have this kind problem resolved, please tell me the way how to resolved.


In Advance,
Thanks & Regards,

Vinod Bheemisetty
Posted
Comments
Maciej Los 10-May-13 2:43am    
What about 1 in your example?

C#
string a = "1,2,3,4";
           string b = "2,3,4,5";

           string[] a_array = a.Split(',');
           string[] b_array=b.Split(',');
           var c = b.Except(a).ToList();
           string result="";

           foreach (var item in c)
           {
               result = result + item.ToString() + ",";
           }
 
Share this answer
 
v2
Comments
Matt T Heffron 14-May-13 12:03pm    
With .Net 4 or later, the foreach loop can be replaced with:
result = string.Join(",", c);
Masoom Mir 15-May-13 2:02am    
k... Thanks for your suggestion
C#
string a = "1,2,3,4";
string b = "2,3,4,5";

var c = b.Split(',').Except(a.Split(',')).ToArray();
 
Share this answer
 
To do it on server side:
SQL
--declare variable to store values in format: '1,2,3,4'
DECLARE @storedValues TABLE(myValues NVARCHAR(30))
DECLARE @selectedValues TABLE(myValues NVARCHAR(30))

INSERT INTO @storedValues (myValues)
VALUES('1,2,3,4')

INSERT INTO @selectedValues (myValues)
VALUES('2,3,4,5')

DECLARE @storedNumbers TABLE(myNumber INT)
DECLARE @selectedNumbers TABLE(myNumber INT)

--use CTE to get stored values 
;WITH stVal AS
(
	SELECT LEFT(myValues, CHARINDEX(',',myValues)-1) AS myVal, RIGHT(myValues, LEN(myValues) - CHARINDEX(',',myValues)) AS Remainder
	FROM @storedValues
	WHERE CHARINDEX(',',myValues)>0
	UNION ALL
	SELECT LEFT(Remainder, CHARINDEX(',',Remainder)-1) AS myVal, RIGHT(Remainder, LEN(Remainder) - CHARINDEX(',',Remainder)) AS Remainder
	FROM stVal
	WHERE CHARINDEX(',',Remainder)>0
	UNION ALL
	SELECT Remainder AS myVal, NULL AS Remainder
	FROM stVal
	WHERE CHARINDEX(',',Remainder)=0
)
INSERT INTO @storedNumbers (myNumber)
SELECT myVal
FROM stVal

--uncheck below lines to check returned values
--SELECT myNumber AS StoredNumbers
--FROM @storedNumbers

--use CTE to get selected values 
;WITH selVal AS
(
	SELECT LEFT(myValues, CHARINDEX(',',myValues)-1) AS myVal, RIGHT(myValues, LEN(myValues) - CHARINDEX(',',myValues)) AS Remainder
	FROM @selectedValues
	WHERE CHARINDEX(',',myValues)>0
	UNION ALL
	SELECT LEFT(Remainder, CHARINDEX(',',Remainder)-1) AS myVal, RIGHT(Remainder, LEN(Remainder) - CHARINDEX(',',Remainder)) AS Remainder
	FROM selVal
	WHERE CHARINDEX(',',Remainder)>0
	UNION ALL
	SELECT Remainder AS myVal, NULL AS Remainder
	FROM selVal
	WHERE CHARINDEX(',',Remainder)=0
)
INSERT INTO @selectedNumbers (myNumber)
SELECT myVal
FROM selVal

--uncheck below lines to check returned values
--SELECT myNumber AS SelectedNumbers
--FROM @selectedNumbers

--below query gets only 5
SELECT myNumber AS DiffNumbers
FROM @selectedNumbers 
WHERE myNumber NOT IN (SELECT myNumber FROM @storedNumbers)

--below query gets only 1
SELECT myNumber AS DiffNumbers
FROM @storedNumbers
WHERE myNumber NOT IN (SELECT myNumber FROM @selectedNumbers)

--to get 1 and 5, use:
SELECT myNumber AS DiffNumbers
FROM @selectedNumbers 
WHERE myNumber NOT IN (SELECT myNumber FROM @storedNumbers)
UNION ALL
SELECT myNumber AS DiffNumbers
FROM @storedNumbers
WHERE myNumber NOT IN (SELECT myNumber FROM @selectedNumbers)


In above example i used: Common Table Expressions[^], WITH common_table_expression (Transact-SQL)[^]
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900